NumPy速查手册
📦 一、创建数组
| 方法 |
说明 |
示例 |
np.array(list) |
从列表创建 |
np.array([1,2,3]) → [1 2 3] |
np.arange(start, stop, step) |
类似 range,返回数组 |
np.arange(0, 10, 2) → [0 2 4 6 8] |
np.linspace(start, stop, num) |
等间隔取 num 个点 |
np.linspace(0, 1, 5) → [0. 0.25 0.5 0.75 1. ] |
np.zeros(shape) |
全零数组 |
np.zeros((2,3)) → 2×3 全 0 |
np.ones(shape) |
全一数组 |
np.ones((2,3)) → 2×3 全 1 |
np.eye(N) |
单位矩阵 |
np.eye(3) → 3×3 单位阵 |
np.full(shape, value) |
填充指定值 |
np.full((2,2), 7) → [[7,7],[7,7]] |
np.empty(shape) |
未初始化(垃圾值) |
通常不用,速度最快 |
1import numpy as np
2
3print(np.arange(5)) # [0 1 2 3 4]
4print(np.linspace(0, 1, 3)) # [0. 0.5 1. ]
5print(np.zeros((2, 2))) # [[0. 0.] [0. 0.]]
6print(np.eye(3)) # 3x3 单位矩阵
🔍 二、数组属性
| 属性 |
说明 |
示例 |
ndarray.shape |
维度元组 |
arr.shape → (3, 4) |
ndarray.ndim |
维度数 |
arr.ndim → 2 |
ndarray.size |
元素总数 |
arr.size → 12 |
ndarray.dtype |
数据类型 |
arr.dtype → dtype('float64') |
ndarray.T |
转置(对二维) |
arr.T |
1arr = np.array([[1,2,3],[4,5,6]])
2print(arr.shape) # (2, 3)
3print(arr.size) # 6
4print(arr.T) # [[1 4] [2 5] [3 6]]
✏️ 三、索引与切片
| 操作 |
说明 |
示例 |
arr[i, j] |
索引单个元素 |
arr[0, 1] → 第0行第1列 |
arr[i] |
取第 i 行 |
arr[1] → 第二行 |
arr[:, j] |
取第 j 列 |
arr[:, 0] → 第一列 |
arr[start:stop:step] |
切片 |
arr[0:2, 1:3] |
arr[arr > 5] |
布尔索引 |
返回大于5的元素 |
arr[[0,2], [1,3]] |
花式索引 |
取 (0,1) 和 (2,3) 位置 |
1arr = np.arange(12).reshape(3, 4)
2print(arr)
3# [[ 0 1 2 3]
4# [ 4 5 6 7]
5# [ 8 9 10 11]]
6
7print(arr[1, 2]) # 6
8print(arr[:, 2]) # [ 2 6 10]
9print(arr[arr > 5]) # [ 6 7 8 9 10 11]
10print(arr[[0,2], [1,3]]) # [1, 11] → (0,1)和(2,3)
🔢 四、形状操作
| 方法 |
说明 |
示例 |
reshape(new_shape) |
改变形状(返回新数组) |
arr.reshape(2,6) |
resize(new_shape) |
改变形状(可修改原数组) |
arr.resize(2,6) |
flatten() |
展平为一维(返回副本) |
arr.flatten() |
ravel() |
展平(返回视图,更快) |
arr.ravel() |
np.concatenate((a,b), axis=0) |
拼接数组 |
按行或列拼接 |
np.vstack((a,b)) |
垂直堆叠 |
行数增加 |
np.hstack((a,b)) |
水平堆叠 |
列数增加 |
np.split(arr, indices) |
分割数组 |
|
1a = np.arange(6).reshape(2, 3)
2b = np.array([[7,8,9]])
3print(np.vstack((a, b))) # 垂直拼接
4# [[0 1 2]
5# [3 4 5]
6# [7 8 9]]
7
8print(np.hstack((a, b.T))) # 水平拼接(注意维度匹配)
9# [[0 1 2 7]
10# [3 4 5 8]]
➕ 五、数学运算(逐元素)
| 运算 |
说明 |
示例 |
+ - * / |
四则运算 |
arr + 2 |
** |
幂 |
arr ** 2 |
np.sqrt(arr) |
平方根 |
|
np.exp(arr) |
指数 |
|
np.log(arr) |
自然对数 |
|
np.sin(arr) / np.cos(arr) |
三角函数 |
|
np.abs(arr) |
绝对值 |
|
np.clip(arr, min, max) |
截断 |
|
1arr = np.array([1, 4, 9])
2print(np.sqrt(arr)) # [1. 2. 3.]
3print(arr ** 2) # [ 1 16 81]
4print(np.exp(arr)) # [ 2.718 54.598 8103.08]
📊 六、统计方法
| 方法 |
说明 |
示例 |
np.sum(arr, axis) |
求和 |
np.sum(arr) 或 arr.sum() |
np.mean(arr, axis) |
均值 |
|
np.median(arr) |
中位数 |
|
np.std(arr, axis) |
标准差 |
|
np.var(arr, axis) |
方差 |
|
np.min(arr, axis) / np.max(arr, axis) |
最值 |
|
np.argmin(arr, axis) / np.argmax(arr, axis) |
最值索引 |
|
np.cumsum(arr, axis) |
累积和 |
|
np.cumprod(arr, axis) |
累积积 |
|
np.percentile(arr, q) |
百分位数 |
|
1arr = np.array([[1,2],[3,4]])
2print(arr.sum()) # 10
3print(arr.mean(axis=0)) # [2. 3.] 列均值
4print(arr.std()) # 1.118...
5print(np.argmax(arr)) # 3(展平索引)
🔀 七、排序与搜索
| 方法 |
说明 |
示例 |
np.sort(arr, axis) |
排序(返回新数组) |
np.sort(arr, axis=1) |
arr.sort(axis) |
原地排序 |
|
np.argsort(arr) |
返回排序索引 |
|
np.where(condition, x, y) |
条件选择 |
|
np.unique(arr) |
去重并排序 |
|
np.in1d(arr, values) |
检查成员 |
|
1arr = np.array([3,1,4,2])
2print(np.sort(arr)) # [1 2 3 4]
3print(np.argsort(arr)) # [1 3 0 2] 排序后的原索引
4
5print(np.where(arr > 2, arr, -1)) # [-1 -1 4 3]
6print(np.unique([1,2,2,3])) # [1 2 3]
🧮 八、线性代数(np.linalg)
| 方法 |
说明 |
示例 |
np.dot(a, b) / a @ b |
矩阵乘法 |
|
np.linalg.inv(A) |
矩阵求逆 |
|
np.linalg.det(A) |
行列式 |
|
np.linalg.eig(A) |
特征值和特征向量 |
|
np.linalg.solve(A, b) |
解线性方程组 |
|
np.linalg.norm(x) |
范数 |
|
1A = np.array([[1,2],[3,4]])
2B = np.array([[5,6],[7,8]])
3print(A @ B) # [[19 22] [43 50]]
4print(np.linalg.det(A)) # -2.0
🎲 九、随机数(np.random)
| 方法 |
分布 |
rand(d0, d1) |
均匀 [0,1) |
randn(d0, d1) |
标准正态 |
randint(low, high, size) |
均匀整数 |
normal(loc, scale, size) |
正态(指定均值和标准差) |
uniform(low, high, size) |
均匀(指定范围) |
choice(a, size, replace) |
从 a 中抽样 |
shuffle(arr) |
打乱 |
permutation(arr) |
返回打乱后的新数组 |
seed(n) |
设置随机种子 |
1np.random.seed(42)
2print(np.random.rand(3)) # [0.3745 0.9507 0.732]
3print(np.random.randint(0,10,size=(2,3))) # 2x3 整数
💾 十、输入输出
| 方法 |
说明 |
np.save('file.npy', arr) |
保存为二进制 .npy |
np.load('file.npy') |
加载 .npy |
np.savetxt('file.csv', arr, delimiter=',') |
保存为文本(CSV) |
np.loadtxt('file.csv', delimiter=',') |
加载文本 |
🔧 十一、常用工具
| 方法 |
说明 |
示例 |
np.tile(arr, reps) |
平铺重复 |
np.tile([1,2], 3) → [1,2,1,2,1,2] |
np.repeat(arr, repeats) |
重复元素 |
np.repeat([1,2], 2) → [1,1,2,2] |
np.roll(arr, shift) |
循环移位 |
|
np.transpose(arr, axes) |
转置(更灵活) |
|
np.copy(arr) |
深拷贝 |
|
📝 速查技巧
- 广播机制:形状不同的数组运算时,会自动扩展维度(需满足规则)。
- 视图 vs 副本:
reshape、ravel、切片通常返回视图(修改会影响原数组),而 flatten、copy 返回副本。
- 轴(axis):
axis=0 表示按行(垂直方向),axis=1 表示按列(水平方向),二维中。