慕课网机器学习入门笔记2

Jupyter Notebook中的魔法命令
%run xxxFoler/xxFile.py 直接运行某个python模块或者程序
%timeit 命令 会测试多次输出运行这个命令所耗费平均的时间
%%timeit 命令 回车 后面输入要执行的代码(可以多行)
%time(%%time) 命令 只执行一次这条命令的耗时
%lsmagic 查看所有的魔法命令
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
Numpy数据基础
python本身的[]数组,可以存放任何类型,但是正是这种弱类型导致[]的效率很低
python可以import array,这个array.array(“i”,[i for i in range(xxx)])里面存放的元素会强制为同类型,因此运算效率上会有提高,但是这个array只是单纯的12维数组,而没有提供向量或矩阵的相关运算方法;
而numpy.array([i for i in range(10)])是numpy上的array方法,他在强类型的基础上自带了很多向量矩阵相关的特性和函数;
nparr.dtype可以查看该numpy实例nparr内元素的类型;
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
上图中的i代表整型,可以看到,如果赋给它字符串类型,编译器就会报错
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
numpy的array只接受整型,如果将某个变量赋值为浮点型,则会进行隐式类型转换,如下图所示慕课网机器学习入门笔记2
但是如果在输入时就输入了浮点数,那么则会变成float64类型,如下图所示
慕课网机器学习入门笔记2
创建Numpy数组(和矩阵)
慕课网机器学习入门笔记2
如上图,np.zeros(10)是创建一个含有10个0元素的数组
np.zeros(10,dtype=int)创建一个拥有10个元素并且值为0的类型为int的数组;
np.zeros((3,5))创建一个3行5列,15个元素值均为0的二维数组(矩阵);
慕课网机器学习入门笔记2
np.ones(shape=(3,5))创建一个3行5列,10个元素均为1的二维数组;
慕课网机器学习入门笔记2
np.full((3,5),fill_value=666)创建一个3行5列,15个元素值均为666的二位数组(fill_value,shape可以不写),如下图所示
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
对于np.full的形式,参数颠倒一下也是可以的,如下图所示
慕课网机器学习入门笔记2
np.arrange(0,20,2) 等价于[i for i in range(0,20,2)]是一个从0开始,步长为2,的数组(最后一个值默认为18而非20,前闭后开)
慕课网机器学习入门笔记2
所不同的是,前者的步长不允许是浮点数,而numpy.arrange方法则可以传入浮点数
慕课网机器学习入门笔记2
对于这两种写法,不写步长的话,步长默认为1,如果只写一个参数,例如np.arrange(10)那么默认起始点为0,步长为1
np.linspace(0,20,11)前闭后闭区间在0和20中截取9个数加上0和20一共11个数来平分0到20这部分区间;
慕课网机器学习入门笔记2
np.random.randint(0,10)生成一个范围在[0,10)之间的数字;(左闭右开,取不到10)
np.random.randint(0,10,10),生成一个有10个元素的列表
慕课网机器学习入门笔记2
为了避免混淆,在最后一个参数(就是生成几个数)加上size = ,利于区分
np.random.randint(4,8,size=(3,5))生成一个3行5列15个元素且取值范围在[4,8)之间的随机数;
慕课网机器学习入门笔记2
np.random.seed()设置np之后调用random方法的随机数种子,设置之后就不会自动变化了,每次生成的随机数组会相同,如下图所示
慕课网机器学习入门笔记2
np.random.randm(10)生成10个取值范围[0,1) 的随机数(平均分布的)
慕课网机器学习入门笔记2
符合正态分布的随机数的用法(第一个是符合均值为0,标准差为1分布的随机数,第二个是符合均值为10,标准差为100分布的随机数)
慕课网机器学习入门笔记2
这个的用法是查询文档,例如对参数名字有疑问等
也可以用下图这种方式
慕课网机器学习入门笔记2
Numpy数组和矩阵的基本操作
慕课网机器学习入门笔记2
如上图所示,reshape的方法可以将一个一维数组转化为一个三行五列的二维数组
慕课网机器学习入门笔记2
如上图所示,ndim是用来查看我们的数组是一个几维的数组
shape返回的是一个元组,如果元组里只有一个元素,说明它是一维数组,第一个维度里有10个元素,如果元组里有两个元素,说明它是二维数组,第一个维度有三个元素,即有三行,第二个维度里有五个元素,即有五列
size表示数组里的元素个数
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
如上图所示,对于二位数组,numpy不推荐arr[x][y]来数组取值,推荐arr[x,y]的方式取值
切片的方法也可以应用在numpy中
慕课网机器学习入门笔记2
如上图所示,取前两行前三列的元素不能写成最后一行代码的样子
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
上图所示的是切片的操作
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
如上图所示,在numpy中使用[:] 切片获取的新数组,实际上获取的只是该新数组的引用或者指针列表,而不会像python原生切片一样生成一个新的数组,这就是说,如果我们改变了切片生成的新数组内的元素或者改变了reshape等函数返回的数组内的某个元素,也会同时改变原数组中该位置的元素内容;( 同理修改了原数组中的内容,引用的子数组中的内容也会发生修改变化)
慕课网机器学习入门笔记2
如上图所示,而如果我们不希望生成的新的子数组还是原来的元素,可以在新数组后面加上.copy()方法,这样会生成一个全新的数组和原数组没有任何关系
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
reshape()里面其实是一个元组(2,5),但是这个括号可以省略不写,reshape不改变原来的数组,若是想改变的话,就把reshape后的结果赋给一个新的变量
慕课网机器学习入门笔记2
如上图所示,x是一个一维向量(不是二维数组或二维矩阵),B是一个二维数组(有两个方括号),维度是二,而x的维度是1
慕课网机器学习入门笔记2
若是只想把x改为一个十行的数组,则reshape第二个参数可以为-1,编译器会自动计算并分配,但下图所示的方式就会报错
慕课网机器学习入门笔记2
Numpy数组(和矩阵)的合并与分割
合并操作:慕课网机器学习入门笔记2
如下图所示
A是一个两行三列的二维数组
np.concatenate([A,A],axis=0);这样是竖向相加,结果就是四行三列
np.concatenate([A,A],axis=1);这样是横向相加,结果就是两行六列慕课网机器学习入门笔记2
z = [666,666,666],这是一个一维向量,concatenate处理的[]内的元素维度必须相同,不相同就会报错,如果一定要处理不同维度的数据,我们可以把需要传入的数据先进行reshape操作,如下图所示
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
这种方法得到的也是一个新的数组,A的值并未改变。如果想保留结果,就要把该数组赋给一个新的变量
如下图所示,vstack垂直相加,也就是concatenate里默认的axis=0的相加方式,区别在于vstack可以对不同维度的数据进行只能的相加,兼容性更好
同理hstack水平相加,将数据进行水平相加
vstack垂直相加时,水平方向上的数据个数也要相同,hstack同理
慕课网机器学习入门笔记2
分割操作(跟切片一个道理):
慕课网机器学习入门笔记2
若是想分成两段,传入一个参数就可以:
慕课网机器学习入门笔记2
对二维数组进行分割:(如果是垂直分割,相当于上文中提到的axis = 0,如果是水平分割,相当于上文中提到的axis = 1)
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
二维分割的简便写法:
慕课网机器学习入门笔记2
慕课网机器学习入门笔记2
分割样本数据与标签(最后一列):
慕课网机器学习入门笔记2
若想把标签变成行的形式:
慕课网机器学习入门笔记2