Numpy使用手册 Python中numpy简单使用介绍 创建数组 从列表创建 1 2 3 4 5 6 7 8 9 10 11 12 13 # 一维数组 arr1d = np.array([1, 2, 3, 4, 5]) print(arr1d) # [1 2 3 4 5] # 二维数组 arr2d = np.array([[1, 2, 3], [4, 5, 6]]) print(arr2d) # [[1 2 3] # [4 5 6]] # 三维数组 arr3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) print(arr3d) 特殊数组创建 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # 全零数组 zeros = np.zeros((3, 4)) print(zeros) # 全一数组 ones = np.ones((2, 3)) print(ones) # 单位矩阵 identity = np.eye(3) print(identity) # 等差数列 lin_arr = np.linspace(0, 10, 5) # 从0到10,5个等间距数 print(lin_arr) # [ 0. 2.5 5. 7.5 10. ] # 等差数列(指定步长) arange_arr = np.arange(0, 10, 2) # 从0到10,步长为2 print(arange_arr) # [0 2 4 6 8] # 随机数组 random_arr = np.random.random((2, 3)) # 0-1之间的随机数 print(random_arr) 数组属性 1 2 3 4 5 6 7 8 arr = np.array([[1, 2, 3], [4, 5, 6]]) print("数组:", arr) print("维度:", arr.ndim) # 2 print("形状:", arr.shape) # (2, 3) print("元素总数:", arr.size) # 6 print("数据类型:", arr.dtype) # int64 print("元素大小(字节):", arr.itemsize) # 8 数组索引与切片 一维数组 1 2 3 4 5 6 7 8 arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) print(arr[2]) # 2 print(arr[2:5]) # [2 3 4] print(arr[:5]) # [0 1 2 3 4] print(arr[5:]) # [5 6 7 8 9] print(arr[::2]) # [0 2 4 6 8] 步长为2 print(arr[::-1]) # [9 8 7 6 5 4 3 2 1 0] 反转 多维数组 1 2 3 4 5 6 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(arr[0, 1]) # 2 print(arr[1, :]) # [4 5 6] 第二行 print(arr[:, 1]) # [2 5 8] 第二列 print(arr[0:2, 1:3]) # [[2 3] [5 6]] 子数组 布尔索引 1 2 3 4 5 6 7 8 9 arr = np.array([1, 2, 3, 4, 5, 6]) # 选择大于3的元素 mask = arr > 3 print(mask) # [False False False True True True] print(arr[mask]) # [4 5 6] # 直接使用条件 print(arr[arr % 2 == 0]) # [2 4 6] 偶数 数组操作 形状操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 arr = np.arange(12) print("原始数组:", arr) # 重塑形状 reshaped = arr.reshape(3, 4) print("重塑后:\n", reshaped) # 展平 flattened = reshaped.flatten() print("展平:", flattened) # 转置 transposed = reshaped.T print("转置:\n", transposed) 数组拼接 1 2 3 4 5 6 7 8 9 10 a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) # 垂直拼接 v_stack = np.vstack((a, b)) print("垂直拼接:\n", v_stack) # 水平拼接 h_stack = np.hstack((a, b)) print("水平拼接:\n", h_stack) 数组分割 1 2 3 4 5 6 7 8 9 10 11 12 13 14 arr = np.arange(12).reshape(3, 4) print("原始数组:\n", arr) # 水平分割 h_split = np.hsplit(arr, 2) print("水平分割:") for part in h_split: print(part) # 垂直分割 v_split = np.vsplit(arr, 3) print("垂直分割:") for part in v_split: print(part) 数学运算 基本运算 1 2 3 4 5 6 7 8 a = np.array([1, 2, 3, 4]) b = np.array([5, 6, 7, 8]) print("a + b =", a + b) # [ 6 8 10 12] print("a - b =", a - b) # [-4 -4 -4 -4] print("a * b =", a * b) # [ 5 12 21 32] print("a / b =", a / b) # [0.2 0.333 0.429 0.5] print("a ** 2 =", a ** 2) # [ 1 4 9 16] 通用函数 1 2 3 4 5 6 7 arr = np.array([0, np.pi/2, np.pi]) print("sin:", np.sin(arr)) # [0. 1. 0.] print("cos:", np.cos(arr)) # [1. 0. -1.] print("exp:", np.exp(arr)) # 指数函数 print("log:", np.log(arr + 1)) # 自然对数 print("sqrt:", np.sqrt(arr)) # 平方根 统计函数 1 2 3 4 5 6 7 8 9 10 11 arr = np.array([[1, 2, 3], [4, 5, 6]]) print("数组:\n", arr) print("总和:", np.sum(arr)) # 21 print("平均值:", np.mean(arr)) # 3.5 print("标准差:", np.std(arr)) # 1.7078 print("方差:", np.var(arr)) # 2.9167 print("最小值:", np.min(arr)) # 1 print("最大值:", np.max(arr)) # 6 print("沿轴0求和:", np.sum(arr, axis=0)) # [5 7 9] print("沿轴1求和:", np.sum(arr, axis=1)) # [6 15] 线性代数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 矩阵乘法 a = np.array([[1, 2], [3, 4]]) b = np.array([[5, 6], [7, 8]]) dot_product = np.dot(a, b) print("矩阵乘法:\n", dot_product) # 行列式 det = np.linalg.det(a) print("行列式:", det) # 逆矩阵 inv = np.linalg.inv(a) print("逆矩阵:\n", inv) # 特征值和特征向量 eigenvalues, eigenvectors = np.linalg.eig(a) print("特征值:", eigenvalues) print("特征向量:\n", eigenvectors) 随机数生成 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 设置随机种子(保证结果可重现) np.random.seed(42) # 均匀分布 uniform = np.random.rand(3, 3) # 0-1均匀分布 print("均匀分布:\n", uniform) # 正态分布 normal = np.random.randn(3, 3) # 标准正态分布 print("正态分布:\n", normal) # 整数随机数 integers = np.random.randint(0, 10, (2, 3)) # 0-10的整数 print("整数随机数:\n", integers) # 随机排列 arr = np.arange(10) np.random.shuffle(arr) print("随机排列:", arr) 数组保存与读取 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # 创建示例数组 arr = np.arange(12).reshape(3, 4) # 保存为文本文件 np.savetxt('array.txt', arr) # 从文本文件读取 loaded = np.loadtxt('array.txt') print("从文件读取:\n", loaded) # 保存为二进制文件 np.save('array.npy', arr) # 从二进制文件读取 loaded_binary = np.load('array.npy') print("从二进制文件读取:\n", loaded_binary) # 保存为压缩的二进制文件 np.savez('array_compressed.npz', my_array=arr) # 从压缩文件读取 loaded_compressed = np.load('array_compressed.npz') print("从压缩文件读取:\n", loaded_compressed['my_array']) 实用技巧 广播机制 1 2 3 4 5 6 7 8 9 10 # 数组与标量的运算(广播) arr = np.array([[1, 2, 3], [4, 5, 6]]) result = arr + 10 # 每个元素加10 print("广播加法:\n", result) # 不同形状数组的运算 a = np.array([[1], [2], [3]]) # 形状 (3, 1) b = np.array([4, 5, 6]) # 形状 (3,) result = a + b # 广播为 (3, 3) print("形状广播:\n", result) 条件运算 1 2 3 4 5 6 7 8 9 arr = np.array([1, 2, 3, 4, 5]) # where函数 result = np.where(arr > 3, arr, 0) # 大于3的保留,其他设为0 print("条件运算:", result) # [0 0 0 4 5] # 布尔运算 mask = (arr > 2) & (arr < 5) # 2 < arr < 5 print("布尔掩码:", mask) # [False False True True False]