Python NumPy 入门指南:数据处理与科学计算的瑞士军刀
NumPy(Numerical Python)是 Python 科学计算生态的核心库,几乎所有数据科学、机器学习、物理模拟等领域的高性能库(如 Pandas、SciPy、TensorFlow、PyTorch)都建立在它之上。它提供了高效的多维数组对象 ndarray 和大量数学函数,让 Python 处理数值计算时速度接近 C 语言。
1. 为什么选择 NumPy?
| 特性 | 说明 | 与纯 Python 列表对比 |
|---|---|---|
| 性能极高 | 底层用 C 实现,向量化运算避免 Python 循环 | 相同操作快 10~100 倍 |
| 内存高效 | 同类型数据连续存储,无对象开销 | 列表每个元素都是独立对象,内存浪费 |
| 广播机制 | 不同形状数组自动对齐运算 | 列表需手动循环处理 |
| 丰富数学函数 | 线性代数、傅里叶变换、随机数等 | Python 内置数学功能非常有限 |
| 多维数组支持 | 支持任意维度数组(1D、2D、3D…) | 列表嵌套实现多维,操作繁琐 |
一句话:NumPy 是 Python 进行数值计算的“瑞士军刀”。
2. 安装与导入
pip install numpy
import numpy as np # 约定俗成的别名
print(np.__version__) # 查看版本(2026 年主流版本 >= 2.0)
3. 核心数据结构:ndarray(N-dimensional array)
创建数组:
# 从列表创建
a = np.array([1, 2, 3, 4])
b = np.array([[1, 2], [3, 4], [5, 6]]) # 2D 数组
# 常用创建函数
np.zeros((3, 4)) # 全 0 数组
np.ones((2, 3)) # 全 1 数组
np.full((2, 2), 7) # 全填 7
np.arange(0, 10, 2) # [0, 2, 4, 6, 8]
np.linspace(0, 1, 5) # 等间隔 5 个数:[0., 0.25, 0.5, 0.75, 1.]
np.random.random((3, 3)) # 随机浮点数 [0,1)
np.eye(4) # 4x4 单位矩阵
基本属性:
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr.ndim) # 维度数:2
print(arr.shape) # 形状:(2, 3)
print(arr.size) # 元素总数:6
print(arr.dtype) # 数据类型:int64
print(arr.itemsize) # 每个元素字节数:8
4. 索引、切片与花式索引
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]])
arr[1, 2] # 第1行第2列 → 7
arr[0, :] # 第0行 → [1,2,3,4]
arr[:, 1] # 第1列 → [ 2, 6,10]
arr[0:2, 1:3] # 子数组 → [[2, 3], [6, 7]]
# 布尔索引
arr[arr > 7] # [ 8, 9,10,11,12]
# 花式索引
arr[[0, 2], [1, 3]] # 取 (0,1) 和 (2,3) 位置 → [2, 12]
5. 向量化运算与广播(Broadcasting)
核心优势:无需循环,直接对整个数组运算。
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
a + b # [5, 7, 9]
a * 3 # [3, 6, 9]
np.sqrt(a) # [1. , 1.414, 1.732]
a > 2 # [False, False, True]
# 广播:不同形状自动扩展
A = np.array([[1, 2, 3],
[4, 5, 6]]) # (2,3)
b = np.array([10, 20, 30]) # (3,)
A + b # 自动将 b 广播为 (2,3) 形状
# 结果:
# [[11, 22, 33],
# [14, 25, 36]]
6. 常用数学与统计函数
arr = np.array([1, 2, 3, 4, 5])
np.sum(arr) # 15
np.mean(arr) # 3.0
np.std(arr) # 标准差
np.max(arr), np.min(arr)
np.argmax(arr) # 最大值索引:4
# 轴向运算(axis 参数)
matrix = np.array([[1, 2], [3, 4]])
matrix.sum(axis=0) # 按列求和 → [4, 6]
matrix.sum(axis=1) # 按行求和 → [3, 7]
7. 线性代数(numpy.linalg)
A = np.array([[1, 2], [3, 4]])
b = np.array([5, 6])
np.dot(A, b) # 矩阵乘向量 → [17, 39]
np.linalg.inv(A) # 求逆
np.linalg.det(A) # 行列式:-2.0
np.linalg.eig(A) # 特征值与特征向量
8. 数组变形与拼接
arr = np.arange(6)
arr.reshape(2, 3) # 重塑形状 → [[0,1,2],[3,4,5]]
arr.resize(2, 3) # 原地修改
# 拼接
a = np.array([1, 2])
b = np.array([3, 4])
np.concatenate([a, b]) # [1,2,3,4]
np.vstack([a, b]) # 垂直堆叠
np.hstack([a, b]) # 水平堆叠
9. 性能对比:NumPy vs 纯 Python
import time
# 纯 Python 列表
size = 1000000
list1 = list(range(size))
list2 = list(range(size))
start = time.time()
result = [x + y for x, y in zip(list1, list2)]
print("Python 列表耗时:", time.time() - start)
# NumPy
arr1 = np.arange(size)
arr2 = np.arange(size)
start = time.time()
result = arr1 + arr2
print("NumPy 耗时:", time.time() - start)
# 输出:NumPy 通常快 50~100 倍!
10. 入门建议与进阶路径
- 练习平台:LeetCode(数组题)、Kaggle(数据分析入门)
- 进阶方向:
- Pandas:基于 NumPy 的表格数据处理
- Matplotlib/Seaborn:数据可视化
- SciPy:科学计算扩展
- scikit-learn:机器学习
- PyTorch/TensorFlow:深度学习(张量基于 NumPy)
一句话总结:
NumPy 是 Python 科学计算的基石——掌握它,你就拥有了高效处理海量数值数据的“瑞士军刀”!
准备好开始你的 NumPy 之旅了吗?试试运行上面的代码,感受向量化运算的魅力吧~如果想继续学习 Pandas、数据可视化或机器学习实战,随时告诉我,我继续带你进阶!🚀