Python NumPy模块核心功能与常用操作指南

周予安
周予安
发布时间:2026-10-13 | 5人浏览过
原创

本文详细解析Python中NumPy模块的常见用法,涵盖数组创建、数据类型控制、基础数学运算、矩阵乘法、统计聚合、排序查找、索引切片以及数组合并与拆分等核心功能。通过具体代码示例,帮助开发者快速掌握NumPy在科学计算中的关键操作。

NumPy数组创建与属性查看

本文汇总了Python中NumPy模块的常用功能与示例,旨在为读者提供实用的参考。


import numpy as np


arr = np.array([[1,2,3], [2,3,4]])
print(arr)
print(type(arr))
print('number of dim:', arr.ndim)
print('shape:', arr.shape)
print('size:', arr.size)

输出结果展示了一个二维数组及其属性: [[ 1 2 3] [ 2 3 4]] 维度数:2 形状:(2, 3) 元素总数:6


a32 = np.array([1,23,456], dtype=np.int)
print(a32.dtype)
a64 = np.array([1,23,456], dtype=np.int64)
print(a64.dtype)
f64 = np.array([1,23,456], dtype=np.float)
print(f64.dtype)

展示了不同数据类型的打印输出: int32 int64 float64

常用数组生成函数


z = np.zeros((3, 4))
print(z)
print(z.dtype)
print()
one = np.ones((3, 4), dtype=int)
print(one)
print(one.dtype)
print()
emt = np.empty((3, 4), dtype=int)
print(emt)
print(emt.dtype)
print()
ran = np.arange(12).reshape((3,4))
print(ran)
print(ran.dtype)
print()
li = np.linspace(1, 10, 6).reshape(2, 3)
print(li)
print(li.dtype)

演示了零数组、全1数组、空数组、范围数组及线性空间数组的创建与属性: [[0. 0. 0. 0.] [0. 0. 0. 0.] [0. 0. 0. 0.]] float64 [[1 1 1 1] [1 1 1 1] [1 1 1 1]] int32 [[ 0 1072693248 1717986918 1074161254] [ 1717986918 1074947686 -1717986918 1075419545] [ 1717986918 1075865190 0 1076101120]] int32 [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] int32 [[ 1. 2.8 4.6] [ 6.4 8.2 10. ]] float64

数组基本数学运算


a = np.array([10,20,30,40])
b = np.arange(4)
print(a)
print(b)
print()
print(a+b)
print(a-b)
print(a*b)
print()
print(a**b)
print()
print(10*np.sin(a))
print()
print(b<3)
print()

展示了数组间的加减乘除、幂运算、三角函数及布尔比较结果: [10 20 30 40] [0 1 2 3] [10 21 32 43] [10 19 28 37] [ 0 20 60 120] [ 1 20 900 64000] [-5.44021111 9.12945251 -9.88031624 7.4511316 ] [ True True True False]

矩阵乘法与元素级运算


a = np.array([[1,2], [3,4]])
b = np.arange(4).reshape(2, 2)
print(a)
print(b)
print()
print(a * b)
print(np.dot(a, b)) #矩阵乘法,或下面:
print(a.dot(b))
print()

演示了数组元素级乘法与矩阵乘法的区别: [[1 2] [3 4]] [[0 1] [2 3]] [[ 0 2] [ 6 12]] [[ 4 7] [ 8 15]] [[ 4 7] [ 8 15]]

统计函数与聚合操作


a = np.random.random((2, 4))
print(a)
print(np.sum(a))
print(np.min(a))
print(np.max(a))
print()
print(np.sum(a, axis=1)) #返回每一行的和。 axis=1代表行
print(np.min(a, axis=0)) #返回每一列的最小值。 axis=0代表列
print(np.mean(a, axis=1)) #返回每一行的平均值

展示了随机数组的生成及各类统计函数的应用: [[0.04456704 0.99481679 0.96599561 0.48590905] [0.56512852 0.62887714 0.78829115 0.32759434]] 总和:4.8011796551183945 最小值:0.04456704487406293 最大值:0.9948167913629338 每行和:[2.4912885 2.30989116] 每列最小值:[0.04456704 0.62887714 0.78829115 0.32759434] 每行平均值:[0.62282212 0.57747279]

极值、排序与累加差分


A = np.arange(2, 14).reshape(3, 4)
print(A)
print(np.argmin(A)) #最小索引
print(np.argmax(A)) #最大索引
print()
print(A.mean())
print(np.median(A)) #中位数
print(A.cumsum()) #累加值
print(np.diff(A)) #相邻差值
print()

演示了数组的极值索引、均值、中位数、累加、差分及非零元素查找: [[ 2 3 4 5] [ 6 7 8 9] [10 11 12 13]] 最小索引:0 最大索引:11 均值:7.5 中位数:7.5 累加值:[ 2 5 9 14 20 27 35 44 54 65 77 90] 全1数组: [[1 1 1] [1 1 1] [1 1 1]] 非零元素坐标:(array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2], dtype=int32), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3], dtype=int32))

数组排序、转置与裁剪


A = np.array([[1,0], [0,3]])
print(A)
print(A.nonzero()) #分别输出非零元素的行和列值
print(np.sort(A)) #逐行排序后的矩阵
print(np.sort(A, axis=0)) #逐列排序的矩阵
print(np.sort(A).nonzero())
print()
B = np.arange(14, 2, -1).reshape(3, 4)
print(B)
print(B.transpose()) #转置
print((B.T).dot(B)) #转置
print()
print(np.clip(B, 5, 9)) #B中将范围限定,大于9的数都为9,小于5的都为5,之间的数不变
print()

展示了非零元素位置、排序、转置及裁剪操作: [[1 0] [0 3]] 非零坐标:(array([0, 1], dtype=int32), array([0, 1], dtype=int32)) 逐行排序: [[0 1] [0 3]] 逐列排序: [[0 0] [1 3]] 非零坐标(排序后):(array([0, 1], dtype=int32), array([1, 1], dtype=int32)) 原始矩阵B: [[14 13 12 11] [10 9 8 7] [ 6 5 4 3]] 转置后: [[14 10 6] [13 9 5] [12 8 4] [11 7 3]] 转置与自身点积: [[332 302 272 242] [302 275 248 221] [272 248 224 200] [242 221 200 179]] 裁剪结果(限制在5-9之间): [[9 9 9 9] [9 9 8 7] [6 5 5 5]]

索引、切片与遍历展平


A = np.arange(3, 7)
print(A)
print(A[2])
print()
B = np.arange(3, 15).reshape(3, 4)
print(B)
print(B[2])
print(B[2][1])
print(B[2, 1])
print()
print(B[2, 2:])
print(B[1:, 2:])
print()
for row in B:
  print(row)
print()
for col in B.T:
  print(col)
print()
print(B.flatten())
for elm in B.flat:
  print(elm)

演示了数组的索引、切片、遍历及展平操作: [3 4 5 6] 索引2的值:5 二维数组B: [[ 3 4 5 6] [ 7 8 9 10] [11 12 13 14]] 第2行:[11 12 13 14] 第2行第1列:12 第2行第1列(另一种写法):12 切片操作: 第2行第2列至末尾:[13 14] 第1行至末尾,第2列至末尾:[[ 9 10] [13 14]] 逐行输出: [3 4 5 6] [ 7 8 9 10] [11 12 13 14] 逐列输出(转置后): [ 3 7 11] [ 4 8 12] [ 5 9 13] [ 6 10 14] 展平数组:[ 3 4 5 6 7 8 9 10 11 12 13 14] 逐个元素输出: 3 4 5 6 7 8 9 10 11 12 13 14

数组合并与形状变换


#矩阵合并
A = np.array([1,1,1])
B = np.array([2,2,2])
C = np.vstack((A, B, A, B))
print(C)
print(A.shape, (A.T).shape)
print(C.shape)
print()
D = np.hstack((A, B))
print(D)
print()
print(A[np.newaxis, :])
print(A[:, np.newaxis])
print(np.hstack((A[:, np.newaxis], B[:, np.newaxis])))
print()
print(np.stack((A,B), axis=0))
print(np.stack((A,B), axis=1))
#print(np.concatenate((A,B,B,A), axis=0))
#print(np.concatenate((A,B,B,A), axis=1))

展示了数组的垂直/水平合并、形状变换及堆叠操作: 合并结果C: [[1 1 1] [2 2 2] [1 1 1] [2 2 2]] 形状信息:(3,) (3,) C的形状:(4, 3) 水平合并D:[1 1 1 2 2 2] 新轴添加示例: [[1 1 1]] [[1] [1] [1]] 水平堆叠新轴结果: [[1 2] [1 2] [1 2]] 垂直堆叠示例: [[1 1 1] [2 2 2]] 堆叠结果(axis=1): [[1 2] [1 2] [1 2]]

数组分割操作


A = np.arange(12).reshape(3, 4)
print(A)
print(np.split(A, 2, axis=1))
print(np.split(A, 3, axis=0))
print()
print(np.array_split(A, 3, axis=1)) #不等分割
print()
print(np.hsplit(A, 2))
print(np.vsplit(A, 1))

演示了数组的分割操作: 原始数组A: [[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] 按列分割为2部分: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])] 按行分割为3部分: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8, 9, 10, 11]])] 不等分割(按列): [array([[0, 1], [4, 5], [8, 9]]), array([[ 2], [ 6], [10]]), array([[ 3], [ 7], [11]])] 水平分割: [array([[0, 1], [4, 5], [8, 9]]), array([[ 2, 3], [ 6, 7], [10, 11]])] 垂直分割: [array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])]

数组引用与拷贝机制


A = np.arange(4)
B = A
C = B
D = A.copy()
print(A, B, C, D)
A[0] = 5
print(A, B, C, D)
print(id(A), id(B), id(C), id(D)) #id返回指针的值(内存地址)
print()

展示了数组的引用与拷贝机制及内存地址差异: 初始状态:[0 1 2 3] [0 1 2 3] [0 1 2 3] [0 1 2 3] 修改A[0]后:[5 1 2 3] [5 1 2 3] [5 1 2 3] [0 1 2 3] 内存地址(id):172730832 172730832 172730832 172730792

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表