Python NumPy入门指南:数据处理科学计算的瑞士军刀

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、数据可视化或机器学习实战,随时告诉我,我继续带你进阶!🚀

文章已创建 3707

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部