1. 基本属性
No. | 属性名 | 描述 |
---|---|---|
01 | shape | 向量、矩阵的结构 |
02 | dtype | 向量、矩阵的数据类型 |
03 | ndim | 向量、矩阵维度 |
04 | size | 向量、矩阵的元素个数 |
-
测试代码
import numpy as np# 定义数据a = np.arange(15).reshape(3, 5)# 基本属性print(a.shape)print(a.dtype)print(a.ndim)print(a.size)
-
结果
(3, 5)int32215
2. 常用数学运算
1. 基本运算
-
测试代码
import numpy as np# 定义数据a = np.array([[1, 2], [3, 4]])b = np.array([[10, 20], [30, 40]])# 基本运算# 矩阵运算print(b - a, '\n')# 矩阵与常数运算print(b - 1, '\n')# 矩阵次幂运算print(a ** 2)
-
结果
[[ 9 18] [27 36]][[ 9 19] [29 39]][[ 1 4] [ 9 16]]
2. 矩阵乘法(2种)
-
测试代码
import numpy as npa = np.array([[1, 2], [3, 4]])b = np.array([[10, 20], [30, 40]])# *号乘法,对应位置数据进行相乘print(a * b, '\n')# 矩阵乘法print(a.dot(b)) # print(np.dot(a, b))
-
结果
[[ 10 40] [ 90 160]][[ 70 100] [150 220]]
3. 最大值、最小值
-
测试代码
import numpy as npa = np.array([[10, 20], [30, 40]])# 最大值print(a.max())# 最小值print(a.min())
-
结果
4010
4. 按行、列求和
-
测试代码
import numpy as npa = np.array([[10, 20], [30, 40]])# 按行求和print(a.sum(axis=1), '\n')# 按列求和print(a.sum(axis=0))
-
结果
[30 70][40 60]
5. 比较运算
-
测试代码
import numpy as npa = np.array([[10, 20, 80], [30, 40, 60]])# 判断是否等于10print(a == 10, '\n')# 判断是否大于30print(a > 35, '\n')# 可以使用判断结果作为索引得到数据dataGt35 = (a > 35)print(a[dataGt35])
-
结果
[[ True False False] [False False False]][[False False True] [False True True]][80 40 60]
6. 向上、向下取整
-
测试代码
import numpy as npa = 10 * np.random.random((2, 3))print(a, '\n')# 向上取整print(np.ceil(a), '\n')# 向下取整print(np.floor(a))
-
结果
[[4.57151067 9.42335419 8.83125138] [7.55599306 7.10207961 6.26744524]][[ 5. 10. 9.] [ 8. 8. 7.]][[4. 9. 8.] [7. 7. 6.]]
7. 其他常用运算(e的次幂、开平方)
-
测试代码
import numpy as npa = np.array([[1, 2], [3, 4]])# e的次幂操作print(np.exp(a), '\n')# 开平方操作print(np.sqrt(a))
-
结果
[[ 2.71828183 7.3890561 ] [20.08553692 54.59815003]][[1. 1.41421356] [1.73205081 2. ]]
3. 与、或操作
-
测试代码
import numpy as npa = np.array([[10, 20], [30, 40]])# 与操作print((a > 15) & (a < 35), '\n')print((a > 15) & (a < 35), '\n')# 或操作print((a == 10) | (a < 30))
-
结果
[[False True] [ True False]][[ True True] [False False]]
4. 常用方法
No. | 方法 | 描述 | 举例 |
---|---|---|---|
01 | ravel | 将矩阵转换成向量 | a.ravel() |
02 | T | 转置矩阵 | a.T |
03 | reshape | 重新定义向量、矩阵结构 | a.reshape(3, 4) |
04 | hstack | 按行进行矩阵拼接 | np.hstack((a, b)) |
05 | vstack | 按列进行矩阵拼接 | np.vstack((a, b)) |
06 | hsplit | 按行切分矩阵 | np.hsplit(a, 3) |
07 | vsplit | 按列切分矩阵 | np.vsplit(a, 3) |
08 | tile | 使用现有矩阵扩展矩阵 | np.tile(a, (3, 5)) |
1. ravel
-
测试代码
import numpy as npa = np.array([[10, 20], [30, 40]])print(a.ravel())
-
结果
[10 20 30 40]
2. T
-
测试代码
import numpy as npa = np.array([[10, 20], [30, 40]])print(a.T)
-
结果
[[10 30] [20 40]]
3. reshape
-
测试代码
import numpy as npa = np.arange(15)# 将向量a重新定义结构为(3, 5)的矩阵print(a.reshape((3, 5)), '\n')# 如果设置-1,则表示自动计算数值print(a.reshape((5, -1)))
-
结果
[[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]][[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11] [12 13 14]]
4. 矩阵拼接
-
测试代码
import numpy as npa = np.array([[1, 2], [3, 4]])b = np.array([[5, 6], [7, 8]])# 横向拼接print(np.hstack((a, b)), '\n')# 纵向拼接print(np.vstack((a, b)))
-
结果
[[1 2 5 6] [3 4 7 8]][[1 2] [3 4] [5 6] [7 8]]
5. 矩阵切分
-
测试代码
import numpy as npa = np.arange(27).reshape(3, 9)# 按行切分print(np.hsplit(a, 3), '\n')# 自定义切分位置print(np.hsplit(a, (3, 5, 7)), '\n')b = a.T# 按列切分print(np.vsplit(b, 3))
-
结果
[array([[ 0, 1, 2], [ 9, 10, 11], [18, 19, 20]]), array([[ 3, 4, 5], [12, 13, 14], [21, 22, 23]]), array([[ 6, 7, 8], [15, 16, 17], [24, 25, 26]])][array([[ 0, 1, 2], [ 9, 10, 11], [18, 19, 20]]), array([[ 3, 4], [12, 13], [21, 22]]), array([[ 5, 6], [14, 15], [23, 24]]), array([[ 7, 8], [16, 17], [25, 26]])][array([[ 0, 9, 18], [ 1, 10, 19], [ 2, 11, 20]]), array([[ 3, 12, 21], [ 4, 13, 22], [ 5, 14, 23]]), array([[ 6, 15, 24], [ 7, 16, 25], [ 8, 17, 26]])]
6. tile
-
测试代码
import numpy as npa = np.arange(6).reshape(2, 3)# 扩展矩阵print(np.tile(a, (2, 2)))
-
结果
[[0 1 2 0 1 2] [3 4 5 3 4 5] [0 1 2 0 1 2] [3 4 5 3 4 5]]