NumPy 速查表
本文档汇总了 NumPy 常用语法和函数的快速参考。
导入
import numpy as np
数组创建
从数据创建
np.array([1, 2, 3]) # 从列表
np.array([[1, 2], [3, 4]]) # 二维数组
np.array([1, 2], dtype=np.float32) # 指定类型
特殊数组
np.zeros(5) # 全零一维
np.zeros((3, 4)) # 全零二维
np.ones((2, 3)) # 全一
np.full((2, 3), 99) # 填充值
np.eye(3) # 单位矩阵
np.diag([1, 2, 3]) # 对角矩阵
np.empty((2, 3)) # 未初始化
序列数组
np.arange(5) # [0, 1, 2, 3, 4]
np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
np.linspace(0, 1, 5) # [0, 0.25, 0.5, 0.75, 1]
np.logspace(0, 2, 3) # [1, 10, 100]
随机数组
np.random.rand(3, 2) # [0, 1) 均匀分布
np.random.randn(3, 2) # 标准正态分布
np.random.randint(0, 10, (3, 3)) # 整数 [0, 10)
np.random.choice([1, 2, 3], 5) # 随机选择
np.random.seed(42) # 设置随机种子
rng = np.random.default_rng(42) # Generator (推荐)
rng.random((2, 3)) # 使用 Generator
数组属性
arr.shape # 形状 (3, 4)
arr.ndim # 维度数 2
arr.size # 元素总数 12
arr.dtype # 数据类型
arr.itemsize # 元素字节大小
arr.nbytes # 总字节数
arr.T # 转置
数据类型
| dtype | 说明 |
|---|---|
np.int8/16/32/64 | 有符号整数 |
np.uint8/16/32/64 | 无符号整数 |
np.float16/32/64 | 浮点数 |
np.complex64/128 | 复数 |
np.bool_ | 布尔 |
np.object_ | Python 对象 |
np.dtype('float32') # 创建 dtype
arr.astype(np.float64) # 类型转换
基本运算
算术运算(元素级)
a + b # 加法
a - b # 减法
a * b # 乘法
a / b # 除法
a ** b # 幂运算
a // b # 整除
a % b # 取模
-a # 相反数
比较运算
a == b # 等于
a != b # 不等于
a > b # 大于
a >= b # 大于等于
a < b # 小于
a <= b # 小于等于
聚合函数
np.sum(a) # 求和
np.prod(a) # 乘积
np.mean(a) # 均值
np.std(a) # 标准差
np.var(a) # 方差
np.min(a) # 最小值
np.max(a) # 最大值
np.argmin(a) # 最小值索引
np.argmax(a) # 最大值索引
np.median(a) # 中位数
np.percentile(a, 25) # 百分位数
np.cumsum(a) # 累积和
np.cumprod(a) # 累积积
np.any(a) # 是否有真
np.all(a) # 是否全部为真
广播
a + 1 # 标量广播
a + b # 自动广播匹配形状
矩阵运算
a @ b # 矩阵乘法
np.dot(a, b) # 点积
np.inner(a, b) # 内积
np.outer(a, b) # 外积
np.cross(a, b) # 叉积
np.linalg.inv(a) # 矩阵逆
np.linalg.det(a) # 行列式
np.linalg.eig(a) # 特征值分解
np.linalg.svd(a) # SVD 分解
索引和切片
基本索引
arr[0] # 第一个元素
arr[-1] # 最后一个元素
arr[0, 1] # 二维数组元素
切片
arr[1:4] # 索引1到3
arr[:5] # 开头到4
arr[::2] # 每隔一个
arr[::-1] # 反转
arr[1:, :3] # 多维切片
高级索引
arr[[0, 2, 4]] # 整数数组索引
arr[arr > 5] # 布尔索引
np.where(arr > 5) # 返回索引
np.where(arr > 5, arr, 0) # 条件赋值
形状操作
arr.reshape((3, 4)) # 改变形状
arr.flatten() # 展平为一维
arr.T # 转置
arr.swapaxes(0, 1) # 交换轴
arr.squeeze() # 删除单维度
arr.expand_dims(arr, axis=0) # 添加维度
合并和分割
np.concatenate([a, b], axis=0) # 合并
np.vstack([a, b]) # 垂直堆叠
np.hstack([a, b]) # 水平堆叠
np.split(arr, 3, axis=0) # 分割
np.vsplit(arr, 2) # 垂直分割
np.hsplit(arr, 2) # 水平分割
排序
np.sort(arr) # 排序(副本)
arr.sort() # 原地排序
np.argsort(arr) # 返回排序索引
np.lexsort(keys) # 多键排序
np.nonzero(arr) # 非零元素索引
唯一值
np.unique(arr) # 唯一值
np.unique(arr, return_counts=True) # 带计数
np.in1d(a, b) # a 元素是否在 b 中
np.setdiff1d(a, b) # a 中不在 b 中的元素
np.intersect1d(a, b) # 交集
np.union1d(a, b) # 并集
文件 I/O
np.save('arr.npy', arr) # 保存数组
np.load('arr.npy') # 加载数组
np.savetxt('arr.txt', arr) # 保存为文本
np.loadtxt('arr.txt') # 加载文本
np.savez('arr.npz', a=a, b=b) # 保存多个数组
数学函数
# 三角函数
np.sin(a), np.cos(a), np.tan(a)
np.arcsin(a), np.arccos(a), np.arctan(a)
# 指数和对数
np.exp(a) # e^a
np.log(a) # ln(a)
np.log2(a), np.log10(a) # log2(a), log10(a)
# 幂和根
np.power(a, 2) # a^2
np.sqrt(a) # √a
np.square(a) # a^2
# 取整
np.round(a, 2) # 四舍五入
np.floor(a) # 向下取整
np.ceil(a) # 向上取整
np.trunc(a) # 截断
# 其他
np.abs(a), np.fabs(a) # 绝对值
np.sign(a) # 符号
np.maximum(a, b), np.minimum(a, b) # 元素级最大最小
np.clip(a, 0, 10) # 限制范围
np.mod(a, b) # 取模
np.remainder(a, b) # 余数
统计函数
np.mean(a) # 均值
np.median(a) # 中位数
np.std(a) # 标准差
np.var(a) # 方差
np.sum(a) # 求和
np.prod(a) # 乘积
np.percentile(a, 50) # 百分位数
np.quantile(a, 0.5) # 分位数
np.corrcoef(a, b) # 相关系数
np.cov(a, b) # 协方差
np.histogram(a, bins=10) # 直方图
随机函数
# 分布随机
rng.normal(loc=0, scale=1, size=10) # 正态分布
rng.uniform(low=0, high=1, size=10) # 均匀分布
rng.poisson(lam=5, size=10) # 泊松分布
rng.exponential(scale=1, size=10) # 指数分布
rng.binomial(n=10, p=0.5, size=10) # 二项分布
# 随机排列
rng.shuffle(arr) # 原地打乱
rng.permutation(arr) # 返回新排列
rng.choice(arr, 5, replace=False) # 随机选择
数组比较
np.array_equal(a, b) # 形状和值都相等
np.array_equiv(a, b) # 广播后相等
np.allclose(a, b, rtol=1e-05) # 近似相等
np.isclose(a, b) # 元素级近似相等
np.all(a == b) # 严格相等
常量
np.pi # 圆周率 3.14159...
np.e # 自然常数 2.71828...
np.inf # 无穷大
np.nan # 非数字
np.newaxis # 插入新维度 None