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) int32 2 15
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 np a = 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 np a = np.array([[10, 20], [30, 40]]) # 最大值 print(a.max()) # 最小值 print(a.min())
-
结果
40 10
4. 按行、列求和
-
测试代码
import numpy as np a = 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 np a = np.array([[10, 20, 80], [30, 40, 60]]) # 判断是否等于10 print(a == 10, '\n') # 判断是否大于30 print(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 np a = 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 np a = 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 np a = 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 np a = np.array([[10, 20], [30, 40]]) print(a.ravel())
-
结果
[10 20 30 40]
2. T
-
测试代码
import numpy as np a = np.array([[10, 20], [30, 40]]) print(a.T)
-
结果
[[10 30] [20 40]]
3. reshape
-
测试代码
import numpy as np a = 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 np a = 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 np a = 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 np a = 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]]