numpy指南

numpy指南
flowwalkerNumPy指南
零、目录&思维导图
[TOC]

一、基础导入
- 导入NumPy库(import numpy as np)
1
import numpy as np
二、数组(ndarrays)
2.1 数组创建
- 从列表创建数组(np.array())
1
arr = np.array([1, 2, 3])
- 等差数组(np.arange())
1
arr = np.arange(0, 10, 2) # 生成[0,2,4,6,8]
- 等间隔数组(np.linspace())
1
arr = np.linspace(0, 1, 5) # 生成5个0到1之间的等间隔数
- 全零数组(np.zeros())
1
arr = np.zeros((2, 3)) # 2行3列的全零数组
- 全一数组(np.ones())
1
arr = np.ones((3, 3)) # 3行3列的全一数组
- 0-1随机数组(np.random.rand())
1
arr = np.random.rand(2, 2) # 2行2列的随机数组
2.2 数组属性
- 维度数(ndim)
1
arr.ndim # 返回数组的维度数量
- 形状(shape)
1
arr.shape # 返回(行数, 列数)
- 元素总数(size)
1
arr.size # 返回数组中所有元素的个数
- 数据类型(dtype)
1
arr.dtype # 返回数组元素的数据类型
三、索引与切片(Indexing & Slicing)
3.1 一维数组
- 单个元素索引
1
arr[1] # 获取索引为1的元素
- 区间切片(左闭右开)
1
arr[2:5] # 获取索引2到4的元素
- 从指定位置到末尾
1
arr[3:] # 获取索引3及以后的所有元素
- 从开头到指定位置
1
arr[:2] # 获取索引0和1的元素
3.2 二维数组
- 单个元素索引
1
arr[row, col] # 获取第row行第col列的元素
- 行+列切片
1
arr[1:3, :2] # 获取第1-2行,第0-1列的子数组
3.3 布尔掩码(Boolean Masking)
- 创建布尔掩码
1
mask = arr > 5 # 生成与arr形状相同的布尔数组
- 掩码索引
1
arr[mask] # 返回所有满足条件的元素
四、数学运算(Mathematical Operations)
4.1 逐元素运算(Element-wise)
- 加法
1
arr1 + arr2
- 乘法
1
arr1 * arr2
- 减法
1
arr1 - arr2
- 除法
1
arr1 / arr2
4.2 统计运算
- 均值(np.mean())
1
np.mean(arr)
- 求和(np.sum())
1
2
3np.sum(arr)
np.sum(arr, axis=0) # 按列求和
np.sum(arr, axis=1) # 按行求和 - 最大值(np.max())
1
np.max(arr)
- 最小值(np.min())
1
np.min(arr)
- 标准差(np.std())
1
np.std(arr)
4.3 点积(Dot Product)
- 点积函数(np.dot())
1
np.dot(a, b)
- 矩阵乘法运算符(@)
1
a @ b
五、广播(Broadcasting)
规则:从右对齐形状,维度匹配或其中一个维度为1时自动扩展
1 | arr1 = np.ones((3, 3)) # 形状(3,3) |
六、函数与工具(Functions & Utilities)
6.1 数组重塑
- 重塑形状(reshape())
1
arr.reshape(2, 3) # 将数组重塑为2行3列
- 展平数组(flatten())
1
arr.flatten() # 将多维数组转为一维数组
6.2 数组拼接
- 通用拼接(np.concatenate())
1
np.concatenate((a, b), axis=0) # 垂直拼接
- 垂直堆叠(np.vstack())
1
np.vstack((a, b)) # 按行垂直堆叠
- 水平堆叠(np.hstack())
1
np.hstack((a, b)) # 按列水平堆叠
一、np.concatenate(axis=0) 上下拼(通用)
axis=0→ 沿着行方向拼接,行数变多。例1:二维数组上下拼
1
2
3
4
5
6
7
8 a = np.array([[1, 2],
[3, 4]])
b = np.array([[5, 6],
[7, 8]])
c = np.concatenate((a, b), axis=0)
print(c)结果:
1
2
3
4 [[1 2]
[3 4]
[5 6]
[7 8]]形状:(2,2) + (2,2) → (4,2)
例2:三个数组一起上下拼
1
2
3
4
5
6 a = np.array([[0]])
b = np.array([[1]])
c = np.array([[2]])
res = np.concatenate((a, b, c), axis=0)
print(res)结果:
1
2
3 [[0]
[1]
[2]]二、np.concatenate(axis=1) 左右拼(通用)
axis=1→ 沿着列方向拼接,列数变多。
1
2
3
4
5
6
7
8 a = np.array([[1, 2],
[3, 4]])
b = np.array([[5, 6],
[7, 8]])
c = np.concatenate((a, b), axis=1)
print(c)结果:
1
2 [[1 2 5 6]
[3 4 7 8]]形状:(2,2) + (2,2) → (2,4)
三、np.vstack 垂直堆叠(上下拼,专用)
v = vertical(垂直)
效果和concatenate(axis=0)完全一样。例1:二维上下堆叠
1
2
3
4 a = np.array([[1, 2], [3, 4]])
b = np.array([[9, 9], [9, 9]])
print(np.vstack((a, b)))结果:
1
2
3
4 [[1 2]
[3 4]
[9 9]
[9 9]]例2:一维数组用 vstack
一维数组会自动变成二维行向量再拼接:
1
2
3
4 x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
print(np.vstack((x, y)))结果:
1
2 [[1 2 3]
[4 5 6]]四、np.hstack 水平堆叠(左右拼,专用)
h = horizontal(水平)
效果和concatenate(axis=1)一样。例1:二维左右拼
1
2
3
4
5
6 a = np.array([[1],
[2]])
b = np.array([[9],
[9]])
print(np.hstack((a, b)))结果:
1
2 [[1 9]
[2 9]]例2:一维数组左右拼
一维直接接成更长一维:
1
2
3
4 x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
print(np.hstack((x, y)))结果:
1 [1 2 3 4 5 6]
6.3 数组转置
- 转置属性(.T)
1
arr.T
- 转置函数(np.transpose())
1
np.transpose(arr)
七、文件输入输出(File I/O)
7.1 .npy二进制文件
- 保存数组(np.save())
1
np.save('file.npy', arr)
- 加载数组(np.load())
1
arr = np.load('file.npy')
7.2 文本文件
- 保存文本文件(np.savetxt())
1
np.savetxt('file.txt', arr)
- 加载文本文件(np.loadtxt())
1
arr = np.loadtxt('file.txt')
高阶语法(图中未出现)
- 数据类型转换(astype())
1
arr.astype(np.float32) # 将数组转为float32类型
- 条件运算(np.where())
1
np.where(arr > 5, 1, 0) # 满足条件为1,否则为0
- 数组排序(np.sort())
1
np.sort(arr) # 返回排序后的数组
- 唯一值提取(np.unique())
1
np.unique(arr) # 返回数组中的唯一元素
- 最大值索引(np.argmax())
1
np.argmax(arr) # 返回最大值的索引
- 数组复制(copy())
1
arr_copy = arr.copy() # 创建数组的深拷贝
- 花式索引
1
arr[[0, 2, 4]] # 获取索引为0、2、4的元素
- 标准正态分布随机数(np.random.randn())
1
np.random.randn(3, 3) # 生成3行3列的标准正态分布随机数








