提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
一、numpy
numpy是Python的科学计算包,包含了多维数组及多维数组的操作
numpy与Python原生array区别:
- numpy数组在创建时有固定大小,更改ndarray的大小将创建一个新的数组并删除原始数据,不同于Python列表(可以动态增长)
- numpy数组中的元素都需要具有相同的数据类型
- 数组的元素也是数组(可以是Python的原生array,也可以是ndarray)的情况下,构成了多维数组
- numpy数组操作比使用Python内置的序列可能更有效和更少的代码行
1、构建ndarray
之所以出现warning,是因为数组c中列表长度不一致,如图所示
创建ndarray时,也可指定类型,如下图:
2、类型转换
3、常用数组
1)、np.arange()
用来创建一个线性序列数组,在给定间隔内返回均匀间隔的值,格式:
arange([start,]stop[,step],dtype=None)
2)、np.linspace()
np.linspace(start,stop,num=50,endpoint=True)
- 在指定的间隔内返回均匀间隔的数字,用作相同间隔采样
- start:标量,序列起始值
- stop:标量,除非endpoint设置为false,否则为序列的结束值
- num:int,可选。要生成的样本数,默认值为50,必须为非负数
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/75bd23499f4345e8b474fb6e68c6b6aa.png
3)、np.zeros()
定义一个为0的数组,与之相对应的是np.ones()
4)、np.eye()
返回一个二维数组,其对角线为1
5)、np.full()
返回给定性质和类型的数组,填充fill_value
np.full(shape,full_value,dtype)
- shape:int或int的序列新数组的性质
- full_value:标量填充值
- dtype:数据类型,可选数组所需的数据类型默认值为‘None’
4、随机数组
1)、np.random.randint()
将随机数从‘低’(包括)返回到“高”(不包括)
语法:randint(low,high=None,size=None,dtype)
- 使用方法1:将随机整数从低返回到高,左闭右开
- 使用方法2:返回特定形状的随机整数
2)、np.random.random()
- 语法:np.random.random(size=None)
- 返回随机浮点数,在半开区间(0.0,1.0)中
3)、np.random.randn()
- 语法:np.random.randn(形状)
- 从标准正态分布中返回一个样本
4)、np.random.normal()
- 语法:np.random.normal(平均值,标准差,形状)
- 作用:从正态分布中随机抽取样本
- 如果平均值和标准差为0和1,或者不写这2个参数,就等同于np.random.randn()
5)、np.random.choice()
从给定的1-D阵列生成随机样本
- choice(a,size=None,replace,p=None)
- a:1-D数组或int
如果是ndarray,则从其元素生成随机样本
如果是int,则生成随机样本,就像a是np.arrange(a) - size:int或int的元组,可选
输出形状,如果给定的形状是例如(m,n,k),那么绘制了mnk样本,默认值为None,在这种情况下返回单个值 - p:1-D数组,可选与a中每个条目相关的概率。如果没有给出样品则假定均匀分布一个条目
6)、np.random.shuffle()
- 通过混洗其内容来就地修改序列,此功能仅沿着a的第一轴洗牌
- np.random.shuffle(x),x:array_like(要洗牌的数组或列表)
二、ndarray操作
1、ndarray常用属性
1)、np.random.seed()
np.random.seed(Num)可以设置一组种子值,确保每次程序执行时都能生成同样的随机数组
第一次执行:
第二次执行
设置随机种子后,第一次执行:
第二次执行:
从结果不难看出,设置随机种子后,不管执行几次,生成的随机数组结果都一样。
2)、ndarray.shape
ndarray.shape()查看数组信息
3)、ndarray.ndim
ndarray.ndim()查看数组维度
4)、ndarray.size
ndarray.size查看数组元素个数
2、数组索引、切片
1)、一维数组
2)、二维数组
2)、修改数组元素值
3、数组变形
1)、ndarray.reshape()
ndarray.reshape()可以进行数据转换,比如从一维数组转换为三维数组,但是reshape不改变原数据,而是返回修改后的数组
小技巧:当其中一个维度不知道时,可以使用-1代替,程序会自动计算,但-1只能出现一次,否则报错
2)、ndarray.shape
- 查看数组形状
- 修改数组形状,与reshape不同,shape之间改变原数组
3)、ndarray.resize()
与shape相同改变原数组
4)、ndarray.ravel()
- 数组的平铺
- 不管多少维,返回全部铺开变成一维数组,但不改变原数组
4)、ndarray.T
- 和数学意义上的转置相同
- 不改变原数组
4、数组拼接
1)、np.concatenate()
np.concatenate((a1,a2,),axis=0,out=None)沿着现有轴加入一系列数据
-
a1,a2,…:array_like的序列
除尺寸外,阵列必须具有相同形状 -
axis:int,可选,数组为一维时,只能横向合并,为二维及多维时,axis=0为横向合并,axis为1时为纵向合并
数组连接的轴,如果axis为none,数组在使用前是扁平的,默认值为0
多维数组时,拼接思路如下:
维度不同的数组合并时,会报错:
备注:
222:每个三维数组有2个二维数组,每个二维数组有两个一维数组,每个一维数组有两个元素
422:每个三维数组有4个二维数组,每个二维数组有两个一维数组,每个一维数组有两个元素
242:每个三维数组有2个二维数组,每个二维数组有四个一维数组,每个一维数组有两个元素 -
一维数组:如果有一个操作需要设置轴,一维数组只有一个轴,为轴0
axis=0:基本操作单位为一维数组里的一个个元素 -
二维数组:如果有一个操作需要设置轴,二维数组有两个轴,为轴0、轴1
axis=0:基本操作单位为二维数组里的一个个一维数组
axis=1:基本操作单位为一维数组里的一个个元素 -
三维数组:如果有一个操作需要设置轴,三维数组有三个轴,为轴0、轴1、轴2
axis=0:基本操作单位为三维数组里的一个二维数组
axis=1:基本操作单位为二维数组里的一个个一维数组
axis=2:基本操作单位为一维数组里的一个个元素
2)、np.vstack()
- 垂直堆叠数组
- np.vstack(tup)
tup:ndarrays的序列
除了第一个轴外,阵列必须具有相同形状
3)、np.hstack()
水平直堆叠数组
5、数组分割
- 讲一个数组分成几个较小的数组
- 既然有多个数组堆叠,也相应有一个数组拆分成几个小数组
- 和拼接有以下对应关系
split ——>concatenate
hsplit ——>hstack
vsplit ——>vstack
1)、np.split()
语法:np.split(array,indices_or_sections,axis=0)
作用:将数组拆分为多个子数组,不改变原数组
axis:int,可选。要拆分的轴,默认为0
2)、np.vplit()
语法:np.vplit(any,indices_or_sections)
作用:将数组垂直拆分为多个数组(按行)
相当于np.split中axis=0