NumPy 为 Python 提供多维数组与数值计算功能。先使用 import numpy as np 导入模块;合并数组前检查形状与数据类型。基本切片通常返回共享内存的视图,需要独立修改时使用 .copy()。
说明
下表中 arr、arr1 与 arr2 表示数组,values 表示待添加的值。示例需要具有相应形状的数组;索引从 0 开始。
导入模块
import numpy as np
导入与导出
| np.loadtxt('file.txt') | 读取文本文件 |
| np.genfromtxt('file.csv',delimiter=',') | 读取以逗号分隔的 CSV 文件;支持缺失值 |
| np.savetxt('file.txt',arr,delimiter=' ') | 保存为以空格分隔的文本文件 |
| np.savetxt('file.csv',arr,delimiter=',') | 保存为以逗号分隔的 CSV 文件 |
创建数组
| np.array([1,2,3]) | 创建一维数组 |
| np.array([(1,2,3),(4,5,6)]) | 创建二维数组 |
| np.zeros(3) | 创建长度为 3 的全零数组 |
| np.ones((3,4)) | 创建 3 行 4 列的全一数组 |
| np.eye(5) | 创建 5 阶单位矩阵 |
| np.linspace(0,100,6) | 在 0 到 100 之间生成 6 个等间隔值,包含终点 |
| np.arange(0,10,3) | 从 0 开始以 3 为步长生成小于 10 的值 |
| np.full((2,3),8) | 创建 2 行 3 列、所有值为 8 的数组 |
| np.random.rand(4,5) | 生成 4 行 5 列的随机浮点数,范围为 [0, 1) |
| np.random.rand(6,7)*100 | 生成 6 行 7 列的随机浮点数,范围为 [0, 100) |
| np.random.randint(5,size=(2,3)) | 生成 2 行 3 列的随机整数,范围为 0 到 4 |
查看属性
| arr.size | 元素总数 |
| arr.shape | 各个维度的长度 |
| arr.dtype | 元素的数据类型 |
| arr.astype(dtype) | 按指定数据类型转换元素 |
| arr.tolist() | 转换为 Python 列表 |
| np.info(np.eye) | 查看 np.eye 的帮助 |
复制、排序与调整形状
| np.copy(arr) | 复制到新的内存 |
| arr.view(dtype) | 使用指定数据类型重新解释共享的底层内存;不是数值类型转换 |
| arr.sort() | 原地沿最后一个轴排序 |
| arr.sort(axis=0) | 原地沿第 0 个轴排序 |
| two_d_arr.flatten() | 复制并展平为一维数组 |
| arr.T | 转置数组;一维数组的形状不变 |
| arr.reshape(3,4) | 返回形状为 3 行 4 列的数组;可能共享原内存 |
| arr.resize((5,6)) | 原地调整为 5 行 6 列,新增位置填 0;受数组所有权等条件限制 |
添加与删除元素
| np.append(arr,values) | 返回追加元素后的新数组 |
| np.insert(arr,2,values) | 在索引 2 之前插入元素并返回新数组 |
| np.delete(arr,3,axis=0) | 删除索引为 3 的行并返回新数组 |
| np.delete(arr,4,axis=1) | 删除索引为 4 的列并返回新数组 |
拼接与分割
| np.concatenate((arr1,arr2),axis=0) | 沿第 0 个轴拼接,其他维度必须相同 |
| np.concatenate((arr1,arr2),axis=1) | 沿第 1 个轴拼接,其他维度必须相同 |
| np.split(arr,3) | 沿第 0 个轴均分为 3 段,轴长度必须能被 3 整除 |
| np.hsplit(arr,5) | 按列均分为 5 段,列数必须能被 5 整除 |
索引、切片与筛选
| arr[5] | 读取索引为 5 的元素 |
| arr[2,5] | 读取行索引 2、列索引 5 的元素 |
| arr[1]=4 | 将索引为 1 的元素赋值为 4 |
| arr[1,3]=10 | 将行索引 1、列索引 3 的元素赋值为 10 |
| arr[0:3] | 读取索引 0、1、2 的元素;二维数组中为相应行 |
| arr[0:3,4] | 读取行索引 0、1、2 与列索引 4 对应的元素 |
| arr[:2] | 读取前两个元素;二维数组中为前两行 |
| arr[:,1] | 读取所有行中列索引为 1 的元素 |
| arr<5 | 逐元素比较,得到布尔数组 |
| (arr1<3) & (arr2>5) | 组合两个逐元素比较,得到布尔数组 |
| ~arr | 对布尔数组取反;整数数组则执行按位取反 |
| arr[arr<5] | 用布尔掩码选出小于 5 的元素 |
标量运算
| np.add(arr,1) | 每个元素加 1 |
| np.subtract(arr,2) | 每个元素减 2 |
| np.multiply(arr,3) | 每个元素乘 3 |
| np.divide(arr,4) | 每个元素除以 4 |
| np.power(arr,5) | 每个元素取 5 次方 |
向量运算
| np.add(arr1,arr2) | 逐元素相加 |
| np.subtract(arr1,arr2) | 逐元素相减 |
| np.multiply(arr1,arr2) | 逐元素相乘;矩阵乘法可使用 @ |
| np.divide(arr1,arr2) | 逐元素相除 |
| np.power(arr1,arr2) | 逐元素乘方 |
| np.array_equal(arr1,arr2) | 判断形状与对应元素是否相同 |
| np.sqrt(arr) | 逐元素求平方根 |
| np.sin(arr) | 逐元素求正弦,角度单位为弧度 |
| np.log(arr) | 逐元素求自然对数 |
| np.abs(arr) | 逐元素求绝对值 |
| np.ceil(arr) | 向上取整,结果的数据类型不一定是整数 |
| np.floor(arr) | 向下取整,结果的数据类型不一定是整数 |
| np.round(arr) | 舍入到最近整数值,结果的数据类型不一定是整数 |
统计
| np.mean(arr,axis=0) | 沿第 0 个轴求均值 |
| arr.sum() | 所有元素求和 |
| arr.min() | 所有元素中的最小值 |
| arr.max(axis=0) | 沿第 0 个轴求最大值 |
| np.var(arr) | 求总体方差,默认 ddof=0 |
| np.std(arr,axis=1) | 沿第 1 个轴求总体标准差,默认 ddof=0 |
| np.corrcoef(arr) | 计算相关系数矩阵,默认每行表示一个变量 |