NumPy:Python 科学计算的基石

numpy 在 GitHub 上有 32,177 颗星。

对于一个"底层基础设施"级别的库,这个数字背后是真实的大规模使用。Python 科学计算、数据分析、机器学习这三条路,往底层挖,大概率都会碰到 NumPy。

1、 它解决什么问题

Python 原生的列表操作慢,做矩阵运算更慢。一个 1000x1000 的矩阵乘法,纯 Python 循环写法可能要跑几分钟,NumPy 几毫秒搞定。

NumPy 用 C 语言实现了核心计算逻辑,外面包一层 Python 接口。你写的是 Python 代码,跑的是 C 的速度。数据在内存里连续存储,CPU 缓存命中率高,向量化指令能直接用上。

核心能力:

  • ndarray:N 维数组对象,支持任意维度和形状
  • 广播机制(broadcasting):不同形状的数组自动对齐运算
  • 线性代数、傅里叶变换、随机数生成
  • C/C++ 和 Fortran 代码的调用接口

正文顶部截图

2、 基础用法

安装:

pip install numpy

创建数组和基本运算:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = np.array([6, 7, 8, 9, 10])

print(a + b)    # [ 7  9 11 13 15]
print(a * b)    # [ 6 14 24 36 50]
print(a ** 2)   # [ 1  4  9 16 25]

矩阵乘法:

m1 = np.array([[1, 2], [3, 4]])
m2 = np.array([[5, 6], [7, 8]])
print(m1 @ m2)

数组切片和索引:

arr = np.array([[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9]])

print(arr[0, :])    # [1 2 3]  第一行
print(arr[:, 1])    # [2 5 8]  第二列
print(arr[1:, 0:2]) # [[4 5] [7 8]]  子矩阵

广播机制省去了大量手动循环。一个二维数组的每一行加同一个向量,NumPy 自动把向量广播到每一行:

a = np.array([[1, 2, 3],
              [4, 5, 6]])

b = np.array([10, 20, 30])
print(a + b)
# [[11 22 33]
#  [14 25 36]]

3、 生态位

NumPy 不是一个独立工具,它是整个 Python 科学计算栈的地基。

pandas 的 DataFrame 底层是 NumPy 数组。scikit-learn 的算法接口接受 NumPy 数组作为输入。matplotlib 画图的数据源是 NumPy 数组。TensorFlow 和 PyTorch 的张量操作和 NumPy 数组接口高度兼容。

去掉 NumPy,这些库的 API 和性能都会发生根本性变化。理解 NumPy 的数组模型,是理解上层库行为的前提。

README区域截图

4、 适合谁用

  • 做数据分析、机器学习的 Python 开发者,这是绕不开的基础库
  • 科研人员做数值模拟和数据处理
  • 需要高性能数组运算的场景,图像处理、信号处理都算
  • 学 Python 数据科学的新手,NumPy 是路线图的第一站

这是绕不开的基础库

  • 科研人员做数值模拟和数据处理
  • 需要高性能数组运算的场景,图像处理、信号处理都算
  • 学 Python 数据科学的新手,NumPy 是路线图的第一站

更多推荐