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

02-13 21:49