Python科学计算NumPy库的功能介绍、使用和代码示例
NumPy是Python科学计算的核心库,提供高效的ndarray多维数组对象和丰富运算功能。其核心特点包括:同质数据类型、固定大小、连续内存存储和向量化运算。基本操作涵盖数组创建(如np.array()、np.zeros())、形状调整(reshape/flatten)、索引切片、数学运算(支持广播机制)及统计计算(mean/sum等)。NumPy还支持文件IO,常用于数据分析、机器学习等领域,
文章目录
NumPy(Numerical Python)是Python中用于科学计算的核心库,提供了高性能的多维数组对象(ndarray)以及用于处理这些数组的丰富函数集。它是数据分析、机器学习、科学计算等领域的基础,比Python原生列表更高效(尤其处理大规模数据时),并支持向量化运算。
一、NumPy核心概念:ndarray
ndarray(N-dimensional array,N维数组)是NumPy的核心数据结构,具有以下特点:
- 同质性:数组中所有元素必须是同一数据类型(如整数、浮点数)。
- 固定大小:创建后形状(维度)固定,修改形状需通过特定方法(如
reshape)。 - 高效性:存储在连续内存块中,运算速度远快于Python列表。
二、ndarray的基本属性
创建数组后,可通过以下属性查看其特征:
ndim:数组的维度(秩)。shape:数组的形状(各维度大小的元组)。dtype:数组元素的数据类型(如int32、float64)。size:数组元素的总个数(shape各元素乘积)。itemsize:每个元素的字节大小。
三、NumPy的基本使用
1. 安装与导入
pip install numpy # 安装
import numpy as np # 导入(通常简写为np)
2. 数组的创建
常用创建方法:
| 函数 | 功能 |
|---|---|
np.array() |
从Python列表/元组创建数组 |
np.zeros() |
创建全0数组 |
np.ones() |
创建全1数组 |
np.arange() |
类似range,创建有序数组 |
np.linspace() |
创建指定范围内的等间隔数组 |
np.random.rand() |
创建0-1随机数组 |
np.eye() |
创建单位矩阵(对角线为1,其余为0) |
示例代码:
import numpy as np
# 1. 从列表创建数组
arr1 = np.array([1, 2, 3, 4]) # 一维数组
arr2 = np.array([[1, 2], [3, 4]]) # 二维数组(矩阵)
print("arr1:", arr1) # [1 2 3 4]
print("arr2:\n", arr2) # [[1 2] [3 4]]
# 2. 创建特殊数组
zeros = np.zeros((2, 3)) # 2行3列全0数组
ones = np.ones((3, 2)) # 3行2列全1数组
arange = np.arange(0, 10, 2) # 0到10(不含),步长2:[0 2 4 6 8]
linspace = np.linspace(0, 1, 5) # 0到1(含),5个等间隔值:[0. 0.25 0.5 0.75 1. ]
rand = np.random.rand(2, 2) # 2x2随机数组(0-1)
eye = np.eye(3) # 3x3单位矩阵
# 查看属性
print("arr2维度:", arr2.ndim) # 2
print("arr2形状:", arr2.shape) # (2, 2)
print("arr2数据类型:", arr2.dtype) # int64(默认)
print("arr2元素总数:", arr2.size) # 4
3. 数组形状操作
常用方法:
reshape():修改数组形状(不改变数据,返回新数组)。flatten():将多维数组展平为一维数组。transpose():转置数组(行列互换)。
示例代码:
import numpy as np
arr = np.arange(12) # [ 0 1 2 ... 11]
print("原数组形状:", arr.shape) # (12,)
# 重塑为3行4列
reshaped = arr.reshape(3, 4)
print("重塑后形状:", reshaped.shape) # (3, 4)
print("重塑后数组:\n", reshaped)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
# 展平为一维
flattened = reshaped.flatten()
print("展平后:", flattened) # [ 0 1 2 ... 11]
# 转置(3x4 → 4x3)
transposed = reshaped.transpose()
print("转置后形状:", transposed.shape) # (4, 3)
4. 数组索引与切片
与Python列表类似,但支持多维索引:
- 一维数组:
arr[index]、arr[start:end:step] - 二维数组:
arr[row_index, col_index]、arr[row_slice, col_slice]
示例代码:
import numpy as np
# 一维数组索引
arr1d = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]
print("索引第3个元素:", arr1d[2]) # 2(索引从0开始)
print("切片2-5(不含5):", arr1d[2:5]) # [2 3 4]
# 二维数组索引
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("第2行第3列元素:", arr2d[1, 2]) # 6(行索引1,列索引2)
print("第1行所有元素:", arr2d[0, :]) # [1 2 3]
print("前2行,后2列:\n", arr2d[:2, 1:])
# [[2 3]
# [5 6]]
5. 数组运算
NumPy支持向量化运算(无需循环,直接对整个数组操作),效率极高。
| 运算类型 | 示例 |
|---|---|
| 元素级运算 | +、-、*、/、**(平方) |
| 矩阵运算 | np.dot(a, b) 或 a @ b(矩阵乘法) |
| 比较运算 | >、<、==(返回布尔数组) |
示例代码:
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 元素级运算
print("a + b:", a + b) # [5 7 9]
print("a * b:", a * b) # [4 10 18]
print("a的平方:", a **2) # [1 4 9]
# 矩阵乘法(需满足维度兼容:a的列数 = b的行数)
mat1 = np.array([[1, 2], [3, 4]]) # 2x2
mat2 = np.array([[5, 6], [7, 8]]) # 2x2
print("矩阵乘法:\n", mat1 @ mat2) # 等价于np.dot(mat1, mat2)
# [[19 22]
# [43 50]]
# 比较运算
print("a > 2:", a > 2) # [False False True]
6. 广播机制(Broadcasting)
当两个数组形状不同时,NumPy会自动扩展其中一个或两个数组,使它们形状兼容后再运算(无需手动扩展)。
示例代码:
import numpy as np
# 标量与数组运算(标量被广播为数组形状)
a = np.array([1, 2, 3])
print("a + 10:", a + 10) # [11 12 13]
# 不同形状数组运算(自动广播)
b = np.array([[1, 2, 3], [4, 5, 6]]) # 2x3
c = np.array([10, 20, 30]) # 1x3(被广播为2x3)
print("b + c:\n", b + c)
# [[11 22 33]
# [14 25 36]]
7. 统计函数
NumPy提供了丰富的统计函数,用于快速计算数组的统计特征:
| 函数 | 功能 |
|---|---|
np.mean() |
平均值 |
np.median() |
中位数 |
np.sum() |
总和 |
np.max() / np.min() |
最大值/最小值 |
np.std() / np.var() |
标准差/方差 |
示例代码:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("平均值:", np.mean(arr)) # 5.0
print("每行平均值:", np.mean(arr, axis=1)) # [2. 5. 8.](axis=1表示按行计算)
print("总和:", np.sum(arr)) # 45
print("最大值:", np.max(arr)) # 9
print("标准差:", np.std(arr)) # 2.581988897471611
8. 文件操作
NumPy支持将数组保存到文件或从文件加载,常用格式为.npy(二进制)。
示例代码:
import numpy as np
arr = np.array([1, 2, 3, 4])
# 保存数组到文件
np.save("my_array.npy", arr)
# 从文件加载数组
loaded_arr = np.load("my_array.npy")
print("加载的数组:", loaded_arr) # [1 2 3 4]
四、NumPy的应用场景
- 数据分析:与Pandas配合处理结构化数据。
- 机器学习:作为Scikit-learn、TensorFlow等库的底层数据结构。
- 科学计算:解决线性代数、傅里叶变换等问题。
- 图像处理:表示图像像素矩阵并进行处理。
总结
NumPy通过ndarray提供了高效的多维数组操作能力,是Python科学计算的基石。其核心优势在于向量化运算和广播机制,大幅提升了数据处理效率。掌握NumPy是学习数据分析、机器学习等领域的必备基础。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)