Numpy科学计算库
2021-08-08 22:22:25 2 举报
AI智能生成
Python数据分析三剑客-Numpy思维导图
作者其他创作
大纲/内容
6. 形状操作
数组变形
a.reshape(3,5),可以将3*5=15个元素的数组进行整形
a.reshape(-1,5),其中-1表示自动整形,自动计算,将所有数据用5来整形
数组转置
a.T,行变列,列变行
也可以通过np.transpose(a,(2,0,1))来改变数组维度,意思就是将维度2的数据放到维度0,维度0的数据放到维度1,维度1的数据放到维度2
数据堆叠合并
np.concatenate([a,b],axis=1),列增加,默认axis=0,即为行增加
np.hstack((a,b)),水平方向堆叠,列增加
np.vstack((a,b)),竖直方向堆叠,行增加
数组拆分
np.split(a,indices_or_sections=2,axis=1),表示列平均分成两份,默认axis=0,即为行平均分成两份
np.split(a,indices_or_sections=[2,3]),以索引2,3为断点将行分割成3份
np.hsplit(a,indices_or_sections=2),水平方向平均分割成2份,即列分割
np.vsplit(a,indices_or_sections=[1,4]),竖直方向以索引1,4为断点将行分割成3份
7. 广播机制
当两个数组形状不相同时,通过扩展数组的方式来实现加减乘等操作,就是广播
一维:在轴0上广播,即两个数组列相同,行不同,可以直接相加减
二维:在轴1上广播,即两个数组行相同,列不同,可以直接相加减
三维:在轴0上广播,即两个数组第一个轴不同,其他两个轴相同,可以直接相加减
8. 通用函数
元素级数字函数
绝对值 np.abs(a)
开平方 np.sqrt(a)
平方 np.square(b)
自然底数e的幂 np.exp()
自然底数e的对数求解 np.log()
sin函数 np.sin(np.pi/2) 求90度
cos函数 np.cos(0) 求0度
tan函数 np.tan(np.pi/6) 求30度
两个数组中对应位大小 np.maximum(a,b),np.minimum(a,b)
所有都是True,返回True a.all()
只要有一个True,返回True a.any()
内积,即对应位相乘再求和 np.inner(a,b)
裁剪 np.clip(a,10,80) 意思是将小于10的变成10,将大于80的变成80
四舍五入 a.round(2) 意思是保留两位小数
向上取整 np.ceil(a)
向下取整 np.floor(a)
计算对角线的和 np.trace(a)
where函数
np.where(cond,nd1,nd2) 意思是条件cond如果是True,返回nd1的值,否则返回nd2
排序
np.sort(a) 调用模块的方法,返回深拷贝排序结果
a.sort() 调用对象的方法,直接改变原数组
a.argsort() 返回从小到大的排序索引
集合操作
交集:np.intersect1d(a,b)
并集:np.union1d(a,b)
差集:np.setdiff1d(a,b)
数学和统计函数
最大最小值 a.max(),a.min(),axis=0计算列的值,axis=1计算行的值
平均值 a.mean()
中位数 np.median(a)
求和 a.sum()
标准差 a.std()
方差 a.var()
累计和 a.cumsum()
累乘和 a.cumprod()
返回最小值的索引 a.argmin()
返回最大值的索引 a.argmax()
返回符合条件的索引 np.argwhere(a > 20)
协方差 np.cov(a)
相关性系数 np.corrcoef(a)
时间函数
获取日期中的月/日/年: a.dt.month/day/year
9. 线性代数
矩阵乘积,a的列数要等于b的行数
a.dot(b)
np.dot(a,b)
a@b
1. 基本操作
数组创建
使用array函数,将list转换为ndarray:np.array([1,2,3,])
全零、全1数组:np.zeros(10)、np.ones(10)
生成任意指定的数组:np.full(shape=(2,3), fill_value=2.718)
等差数列,左闭右开:np.arange(1,100,step=10)
等差数列,左闭右闭:np.linspace(1,100,num=10),num是分为几部分
生成随机整数:np.random.randint(0,100,size=20)
生成0-1之间的随机数:np.random.rand(3,5)
正态分布:np.random.randn(3,5),平均值是0,标准差是1
指定正态分布:np.random.normal(loc=175,scale=10,size=(3,5)),平均值是175,标准差是10,3行5列
去重:np.unique(a)
数组属性
数组的轴数、维度:a.ndim
数组形状:a.shape
数组类型:a.dtype
数组元素总数:a.size
数组每个元素的大小(字节为单位):a.itemsize
文件读写
保存一个数组:np.save(' ',a)
保存多个数组,以key-value形式保存:np.savez('xxx.npz',a,b)
压缩保存:np.savez_compressed('xxx.npz',a,b)
读取一个数组:np.load('xxx.npy')
通过key获取保存的数组:np.load('xxx.npz')['key']
保存数组到txt或csv:np.savetxt('xxx.txt或者csv',a,delimiter=',',dtype=np.int32)
读取txt或者csv数组:np.loadtxt('xxx.txt或者csv‘,delimiter=',',dtype=np.int32)
2. 数据类型
使用适合的数据类型,可以节省空间
uint8类型为无符号的int8,即0~255
创建数组时,可以指定dtype = 'float32' 也可以写成dtype = np.float32
将列表转换成数组:np.asarray(a,dtype = 'float32')
已有数组的数据类型转换:a.astype(dtype='float32')
3. 数组运算
加减乘除幂运算
+、-、*、/、**
幂运算也可以调用模块函数:np.power(2,3),2的3次幂
log运算:np.log2(1024)、np.log(100)表示自然底数e
逻辑运算
两个数组的对应位置进行比较
>、<、==、>=、<=
数组与标量计算
标量及数字,如3,4,5
a + 10,会将a数组的所有位置都加10,即广播机制
*=、+=、-=操作
直接改变原数组
没有/=操作
4. 复制和视图
完全没有复制
b = a,赋值操作
a is b 为True
修改b后,a也会被修改
a和b对应同一个内存对象
视图、查看或浅拷贝
b = a.view()
a is b 为False
修改b后,a也会被修改
b.base is a为True,说明b视图的根数据是a
a.flags.owndata isTrue,说明a数组数据是自己的
b.flags.owndata is False,说明b不拥有自己的数据
深拷贝
b = a.copy()
a is b为False
修改b后,a不会被修改,a、b完全没有关系了
copy应该在不再需要原来的数组情况下,切片后调用,然后删除原来的数组,内存优化
5. 索引、切片和迭代
基本索引和切片
a[3]取一个,a[[1,3,5]]取多个,注意有两个中括号
数组切片是原始数组的视图,修改会反映到原数组上,如a[5]=12,会改变原数组
切片左闭右开
a[::2],每两个中取一个
a[::-2],倒序,每两个取一个
高维数组,可以用a[0][1]索引,或者a[0,1]索引,先行后列
举例:b[2:7,1::3] # 行:从2到索引7。列:从1开始,每3个中取一个数字
花式索引和索引技巧
花式索引
用整数数组进行索引即花式索引
切片不是深拷贝,花式索引是深拷贝
以二维为例,a[([1,3],[2,4])]相当于a[1,2]获取一个元素,[3,4]获取一个元素,输出两个元素
boolean值索引
首先定义一个条件cond = a > 90,返回布尔值
然后a[cond]返回符合条件的数据
可以多个条件套用,如cond2 = cond[:,0]*cond[:1],a[cond2]
0 条评论
下一页