NumPy 是一个 python 科学计算的核心库,它提供了高性能的多维数组类型和处理这些高维数组的工具。
导入
import numpy as np
创建数组
a = np.array([1,2,3])
a = np.array([(1.5,2,3),(4,5,6)],dtype=float)
a = np.array([[(1.5,2,3),(4,5,6)],[(3,2,1),(4,5,6)]],dtype=float)
初始化元素
np.zeros((3,4)) # 用 0 初始化数组
np.ones((2,3,4)) # 用 1 初始化数组
np.full((2,2),7) # 生成元素全为 7 的数组
np.eye(2) # 生成单位矩阵
np.random.random((2,2)) #生成随机矩阵, 注意有两个 random
np.arrange(10,25,5) # 生成 10 到 25 的数,步长为 5
np.linspace(0,2,9) #9 个数字均分 0 到 2
了解数组特征
a.ndim # 显示数组的维度
a.shape # 显示数组各维度的长度
len(a) # 显示数组长度(第一维)
a.size # 显示数组元素的个数
a.dtype # 显示数组元素的数据类型
a.astype(int) #将数组元素转化为另一种类型
数组的数学操作
算术操作
a.dot(b) # 矩阵乘法
除了上面一个函数,其他操作都是元素级的操作
数组比较
a < 2 # 元素级比较,生成的一个 shape 与原数组相同的 bool 数组
a == b # 元素级比较,数组的 shape 必须相同,结果形式同上
np.array_equal(a.b) #数组级比较,生成一个 bool 变量
聚合函数
a.sum() # 所有元素求和
a.min() # 求所有元素的最小值 ## axis=0 -> 以列为单位 axis=1 -> 以行为单位
a.mean() # 求所有元素的均值
a.mediana() # 求所有元素的中位数
np.std(a) # 求数组的标准差
复制数组
b = a.copy() #b=a.view(),b=np.copy(a)的效果也一样
数组排序
a.sort() # 排序数组,axis 也是可选参数
元素筛选
取子集
a[1,2]或 a[1][2] # 从 0 开始计数,先行后列
切片
#python 中的区间左闭右开,例如 [2:5] 就等于 2,3,4
a[::-1] # 反转数组中的元素
# 其他的操作太 trick 了,需要时再看
布尔索引
a[a<2] # 选出 a 中小于 2 的元素
数组操作
转置数组
a.T # 也可以写成 np.transpose(a)
改变数组的形状
a.ravel() # 将数组拉平
a.reshape(3,-1) #有返回值,所谓有返回值,即不会对原始多维数组进行修改;
# 改变数组形状, 但是不改变数据, 多余数据截断, 缺少数据用 0 补齐
a.resize((3,2)) #无返回值,所谓无返回值,即会对原始多维数组进行修改;
增加或减少元素
np.append(a,b) #将 a 拉平后,在尾部加上 b
np.insert(a,1,5) #在将位置 1 开始的元素整体后移,插入新元素 5
np.delete(a,[1]) #删除位置 1 的元素
拼接数组
np.concatenate((a,b),axis=0) # 要拼接的那个维度长度必须相同,例如 axis=0,就是按行拼接, # 列数必须相同
# 按一行行拼接
np.vstack((a,b))
np.r_[a,b]
# 按一列列拼接
np.hstack((a,b))
np.c_[a,b]
np.column_stack((a,d))
分割数组
np.hsplit(a,3) # 将 a 按列分为 3 个相同的子数组(horizontally == column-wise)
np.vsplit(a,3) # 将 a 按行分为 3 个相同的子数组(vertically == row-wise)
对于 axis 参数的理解
如果我们将聚合函数作用在张量上,张量的维度一定会下降,而 axis 就决定了哪个维度将坍塌。
axis=0 就是 row-wise,axis=1 就是 column-wise,axis=2 就是 depth-wise