笔者:YY同学Serendipity
生命不息,代码不止。好玩的项目尽在GitHub!
1. 数组(矩阵)通用
导入
模块名 | 功能 | 代码示例 | 解释说明 |
---|
numpy | python 多维数组模块 | import numpy as np | np 也可以命名为其他的 |
numpy.linalg | 线性代数 | import numpy.linalg as la | la 也可以命名为其他的 |
创建
方法名 | 功能 | 代码示例 | 解释说明 |
---|
np.array | 创建数组 | a = np.array([1, 2]) | 注意数组(array)与列表(list)的区别,两者部分 method 不是通用的 |
np.asarray | 创建与 list 相同的数组 | a = [1,2,3], b = np.asarray(a) | 数组 b 与列表 a 的元素完全相同,创建的对象可以是列表也可以是数组 |
= | 引用传值 | b = a | b 数组与 a 相同,修改 b 中元素相应的 a 也会被修改(存储空间相同) |
np.copy | 复制传值 | b = a.copy() | b 数组与 a 相同,修改 b 中元素 a 不会被修改(存储空间不同) |
np.empty | 创建空数组 | a = np.empty([3,2]) | 创建形状为 (3, 2) 的随机数组 |
np.zeros | 创建全 0 数组 | a = np.zeros([3,2]) | 创建形状为 (3, 2) 的全 0 数组 |
np.ones | 创建全 1 数组 | a = np.ones([3,2]) | 创建形状为 (3, 2) 的全 1 数组 |
np.eye | 创建单位矩阵
I
I
I | a = np.eye(3) | 创建形状为 (3, 3) 的单位矩阵 |
np.arange | 在范围内创建数组 | a = np.arange(6) | 生成 [0 1 2 3 4 5] 的数组,该写法是省略起始和步长,写全应该是 a = np.arange(0, 6, 1),左闭右开 |
np.linspace | 在范围内创建等差数组 | a = np.linspace(0, 20, 5) | 生成 [ 0. 5. 10. 15. 20.] 的数组,左闭右闭,如果将 endpoint 值设为 False 则不包括终止点 |
np.logspace | 在范围内创建等比数组 | a = np.logspace(0,9,10,base=2) | 生成 [ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.] 的数组,左闭右闭,如果将 endpoint 值设为 False 则不包括终止点,基底(base)默认值为 10 |
属性
属性名 | 功能 | 代码示例 | 解释说明 |
---|
np.ndarray.ndim | 数组维度 | a.ndim | 输出数组维度,例如 [1. 2. 3. 4. 5.] 维度为 1 |
np.ndarray.shape | 数组形状 | a.shape | 输出数组形状,例如 [1. 2. 3. 4. 5.] 形状为 (5, ) |
np.ndarray.size | 数组大小 | a.size | 输出数组总的元素个数。如果是向量则输出长度,如果是矩阵则输出行列之积,例如 [1. 2. 3. 4. 5.] 大小为 5 |
np.ndarray.dtype | 数组数据类型 | a.dtype | 输出数组数据类型,例如 [1. 2. 3. 4. 5.] 数据类型为 float64 |
np.ndarray.base | 判断数组是否共享内存 | a.base is b.base | 复制传值、引用传值的 base 相同、切片的 base 不相同 |
np.ndarray.shape 或 np.shape | 查询数组形状 | a.shape 或 np.shape(a) | 例如五元组的向量则形状为 (5, ),如果是五元组的矩阵则形状为 (5, 1) |
np.ndarray.T | 矩阵转置 | a.T | 得到 矩阵 a 的转置矩阵 |
切片(左闭右开)
A
=
[
1.2.3.4.5.6.
]
A=[1. 2. 3. 4. 5. 6.]
A=[1.2.3.4.5.6.]
B
=
[
1
2
3
4
5
6
7
8
9
]
(3)
B= \left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{matrix} \right] \tag{3}
B=⎣⎡147258369⎦⎤(3)
示例 | 功能 | 输出 |
---|
A[0] | 读取向量 A 的第一个数 | 1 |
A[-1] | 读取向量 A 的倒数第一个数 | 6 |
A[1: -1:2] | 读取向量 A 的第二个数到最后一个数(不包括最后一个),两个两个读 | [2 4] |
A[1::2] | 读取向量 A 的第二个数到最后一个数,两个两个读 | [2 4 6] |
B[1][2] 或 B[1, 2] | 读取矩阵 B 的第二行第三个数 | 6 |
B[2, :] | 读取矩阵 B 的第三行全部 | [7 8 9] |
B[::-1, ::-1] | 倒着输出矩阵 B | [ [9 8 7][6 5 4][3 2 1] ] |
更改
方法名 | 功能 | 代码示例 | 解释说明 |
---|
np.reshape | 改变数组形状 | a = np.zeros(9) b = a.reshape(3,3) | 有返回值且不会修改原数组,b 是形状为 (3, 3) 的全 0 数组,a 仍为 0 到 9 的向量 |
np.resize | 改变数组形状 | a = np.zeros(9) b=a.resize(3,3) | 无返回值且会修改原数组,b 为 None,a 是形状为 (3, 3) 的全 0 数组 |
np.concatenate | 数组拼接 | c = np.concatenate((a,b), axis=0) | 去掉 a 数组和 b 数组的最外围(第0层)然后拼接 |
np.split | 数组拆分 | a=np.array([[1, 2], [3, 4]]) b = np.split(a, 2) | b 为包含 [1, 2] 和 [3, 4] 的二元组 |
判断
方法名 | 功能 | 代码示例 | 解释说明 |
---|
np.isclose | 判断两数相等 | np.isclose(0.333333, 1/3)) | 返回 True,用于判断两个数的误差是否在相等的范围内,是则两数相等 |
np.allclose | 判断数组相等 | np.allclose([0.333333, 3.1415926], [1/3, np.pi])) | 返回 True,用于判断两个数组的每个元素之间误差是否在相等的范围内,是则两数组相等。如果使用 isclose 比较数组,则返回值为包含数组个数的 True/False 的数组。这是因为 isclose 是逐个比较,而 allclose 是全部比较完后生成一个 True/False |
存取
方法名 | 功能 | 代码示例 | 解释说明 |
---|
np.save | 保存数组至文件 | np.save(“example”, np.arange(5)) | 生成 [0, 4] 的数组并存储在名为 “example.npy” 的文件下,注意 “.npy” 后缀会自动生成 |
np.load | 读取数组文件 | y = np.load(“example.npy”) | 从文件中读取数组存放至变量 y 中,注意需要加上 “.npy” 后缀 |
np.savetxt | 保存数组至 .txt 文件 | np.save(“example.txt”, np.arange(5)) | 生成 [0, 4] 的数组并存储在名为 “example.txt” 的文件下 |
np.loadtxt | 读取 .txt 数组文件 | y = np.load(“example.txt”) | 从文件中读取数组存放至变量 y 中 |
np.genfromtxt | 按头尾读取 .txt 数组文件 | y = np.genfromtxt(“example.txt”, skip_header=2, skip_footer=1) | 从文件中读取第二行到倒数第二行的数组存放至变量 y 中 |
2. 计算数学
方法名 | 功能 | 代码示例 | 解释说明 |
---|
np.pi | 常数
π
\pi
π | a = np.pi | 获得常数
π
=
3.141592653589793
\pi=3.141592653589793
π=3.141592653589793 |
np.e | 常数
e
e
e | a = np.e | 获得常数
e
=
2.718281828459045
e=2.718281828459045
e=2.718281828459045 |
np.sin | 正弦 | a = np.sin(np.pi/2) | 参数可以是数或者数组,注意括号里的参数为弧度 |
np.cos | 余弦 | a = np.cos(np.pi/2) | 参数可以是数或者数组,注意括号里的参数为弧度 |
np.tan | 正切 | a = np.tan(np.pi/2) | 参数可以是数或者数组,注意括号里的参数为弧度 |
np.round / np.around | 四舍五入 | a = np.round(4.50) | 参数可以是数或者数组,注意 4.50 四舍五入为 4.0,4.501 四舍五入为 5.0 |
np.floor | 向下取整 | a = np.floor(4.50) | 4.0,参数可以是数或者数组 |
np.ceil | 向上取整 | a = np.ceil(4.50) | 5.0,参数可以是数或者数组 |
np.power | 幂运算 | a = np.power(2, 4) | 16,参数可以是数或者数组 |
np.mod | 模运算 | a = np.mod(10, 3) | 1,参数可以是数或者数组 |
np.random | 随机数 | a = np.random.rand(10) | 随机生成 10 个 0 到 1 之间的伪随机数 |
3. 线性代数
方法名 | 功能 | 代码示例 | 解释说明 |
---|
* | 矩阵元素相乘 | a * b | 计算矩阵 a 与矩阵 b 的每个元素的乘积,乘完矩阵大小不变 |
np.dot | 点积 | c = np.dot(a,b) | 计算矩阵 a 与矩阵 b 的点积 |
np.vdot | 向量点积 | c = np.vdot(a,b) | 计算向量 a 与向量 b 的点积 |
np.inner | 内积 | c = np.inner(a,b) | 计算矩阵 a 与矩阵 b 的内积 |
np.matmul | 矩阵乘积 | c = np.matmul(a,b) | 计算矩阵 a 与矩阵 b 的乘积 |
la.norm | 矩阵的模 | n = la.norm(a) | 计算矩阵 a 的模长 |
la.inv | 逆矩阵 | b = la.inv(a) | 计算矩阵 a 的逆矩阵,逆矩阵点积为单位矩阵
I
I
I |
la.det | 行列式 | b = la.det(a) | 计算矩阵 a 的行列式 |
la.solve | 求解 x | x = la.solve(A, b) | 计算 Ax = b 的解 |
la.eig | 求特征值和特征向量 | eval, evec = la.eig(A) | 计算 A 的特征值和特征向量 |
4. 概率统计
方法名 | 功能 | 代码示例 | 解释说明 |
---|
np.mean | 平均数 | b = np.mean(a) | 计算 a 数组或列表的平均数 |
np.average | 加权平均数 | b = np.average(a,weights = wts) | 计算 a 数组或列表的加权平均数 |
np.median | 中位数 | b = np.median(a) | 计算 a 数组或列表的中位数 |
np.max | 最大值 | b = np.max(a) | 计算 a 数组或列表的最大值 |
np.min | 最小值 | b = np.min(a) | 计算 a 数组或列表的最小值 |
np.ptp | 最大最小差值 | b = np.ptp(a) | 计算 a 数组或列表的最大最小差值 |
np.var | 方差 | b = np.var(a) | 计算 a 数组或列表的方差 |
np.std | 标准差 | b = np.std(a) | 计算 a 数组或列表的标准差 |
持续更新中~