
| 基本信息 | 详情 |
|---|---|
| 开发公司 | 社区项目,创始人 Travis Oliphant,NumFOCUS 财务托管 |
| 上线时间 | 前身 Numeric 1995 年,NumPy 1.0 2006 年发布,2.0 于 2024 年 6 月发布 |
| 官网 | https://numpy.org/ |
| 支持平台 | 跨平台(Linux、macOS、Windows),Python 3.12-3.14 |
| 价格 | 免费,BSD 开源许可证 |
| 核心定位 | Python 科学计算基础库,提供 N 维数组和数学运算 |
NumPy 是 Python 科学计算的基石。几乎所有做数据分析、机器学习或科学计算的人,写的第一行相关代码都是 import numpy as np。它提供了一个叫 ndarray 的多维数组对象,加上一堆围绕它构建的数学函数。底层是 C 代码,所以你享受 Python 的简洁同时拥有编译语言的性能。
故事要从 1995 年说起。Jim Hugunin 写了 Numeric,第一个 Python 数组计算库。后来太空望远镜科学研究所搞了个竞争项目叫 Numarray。两个库各有所长,但分裂让社区很痛苦。2005 年 Travis Oliphant 把 Numarray 的特性合并进 Numeric,重新做了大量修改,发布为 NumPy 1.0(2006 年)。一个统一的标准就此诞生。到 2024 年 6 月,NumPy 2.0 发布--这是自 2006 年以来的第一个大版本,212 位贡献者提交了 1078 个 PR,包含 ABI 破坏性变更和类型提升规则修改。
为什么 NumPy 这么重要?因为它是整个 Python 科学计算生态的地基。Pandas 的 DataFrame 底层是 NumPy 数组。SciPy 建在 NumPy 之上。scikit-learn 的所有 estimator 吃 NumPy 数组。PyTorch 和 TensorFlow 的 tensor 可以和 NumPy 数组零拷贝互转。CuPy 直接复刻 NumPy API 跑在 GPU 上。JAX 的 API 设计也以 NumPy 为蓝本。引力波分析的脚本 import NumPy,M87 黑洞成像项目直接引用了 NumPy。
核心功能
ndarray 多维数组
NumPy 的核心数据结构。连续内存块存储,固定 dtype,支持任意维度。一个 1000x1000 的浮点矩阵,NumPy 占 8MB 连续内存,Python list 要碎成上千个对象。切片返回视图而非副本,内存零复制。
向量化运算(ufunc)
通用函数在 C 层做循环,用 SIMD 指令并行。np.sin(arr) 比纯 Python 循环快约 200 倍。支持加减乘除、三角函数、指数对数、比较运算,全部自动逐元素执行。
广播机制
不同形状的数组自动扩展做运算。一个 (3,1) 数组加一个 (1,3) 数组,结果自动变成 (3,3)。不用手动复制数据,不用写循环。这个机制后来被几乎所有数组库学习。
索引与切片
基本切片、花式索引、布尔索引全覆盖。步长切片通过 strides 元数据实现,转置 arr.T 只改元数据不移动数据。Fancy indexing 返回副本而非视图。
线性代数
np.linalg 提供矩阵乘法、求逆、行列式、特征值、SVD、QR 分解等。底层调 LAPACK 和 BLAS,性能接近原生 Fortran。2.2 版本新增 matvec 和 vecmat 函数。
随机数生成
np.random.default_rng() 提供现代随机数生成器,支持各种分布。比旧版 np.random 更快、更安全、可种子化。
适合谁
适合:所有用 Python 做数值计算的人。数据科学家用它做数据清洗和变换,机器学习工程师用它准备训练数据,科研人员用它做物理仿真和统计分析,后端工程师用它做数值处理。无论你是刚入门还是资深专家,NumPy 都是必备工具。
不适合:需要 GPU 加速做大规模并行计算的场景。NumPy 本身只跑 CPU,GPU 计算用 CuPy 或 JAX。需要分布式计算跑超大规模数据的场景用 Dask。需要自动微分做深度学习的用 PyTorch 或 TensorFlow。但这些工具的 API 都和 NumPy 兼容,学了 NumPy 等于学了它们的入门。
同类竞品对比
| 维度 | NumPy | CuPy | JAX | PyTorch Tensor |
|---|---|---|---|---|
| 核心定位 | CPU 数组计算 | GPU 数组计算 | 可微分数组计算 | 深度学习张量 |
| 运行设备 | CPU | NVIDIA GPU | CPU/GPU/TPU | CPU/GPU |
| 自动微分 | 不支持 | 不支持 | 原生支持 | 原生支持 |
| API 兼容 | 自身标准 | NumPy 兼容 | NumPy 兼容 | 类 NumPy |
| 分布式 | 不支持 | 不支持 | 原生支持 | 通过 DDP |
| 价格 | 免费开源 | 免费开源 | 免费开源 | 免费开源 |
FAQ
NumPy 2.0 破坏性变更影响大吗?
有 ABI break、类型提升规则修改和 C API 变更。纯 Python 用户基本不受影响,但分发二进制包的下游库需要重新编译。官方提供了 Ruff NPY201 规则自动修复大部分 Python 代码变更。
NumPy 能做 GPU 加速吗?
原生不能。NumPy 只跑 CPU。要做 GPU 加速用 CuPy(API 兼容 NumPy)或 JAX。也可以通过 Array API 标准让 scikit-learn 等库接受 CuPy 数组间接实现 GPU 计算。
为什么不用 Python list 而用 NumPy?
三个原因:速度(C 层循环比 Python 快 100-200 倍)、内存(连续存储 vs 碎片化对象)、功能(广播、索引、线性代数等 list 做不了)。
版本迭代节奏怎样?
大约每半年一个版本。2.3(2025 年 6 月)改进自由线程支持,2.4(2025 年 12 月)增加 __numpy_dtype__ 协议,2.5(2026 年 6 月)移除 distutils、放弃 Python 3.11 支持。节奏稳定,向后兼容有保证但跨大版本序列化模型不保证兼容。
商业使用有限制吗?
BSD 许可证,商业使用几乎无限制。可以免费用、修改、分发、闭源使用,只需保留版权声明。
怎么学最快?
官方文档是最好的教材。从 np.array 创建数组开始,学 indexing、broadcasting、ufunc 三个概念就够入门。进阶看 Travis Oliphant 的《Guide to NumPy》。
更新动态
客户评论
作为开源基础设施项目,NumPy 没有传统客户评分,但社区评价极高。
"NumPy 如同科学计算宇宙的引力场,无形却支撑着一切。"--CSDN 技术评测
"从火星探测器处理图像数据,到 AlphaFold 预测蛋白质结构,NumPy 是底层基石。"--NumPy 官方历史页
"PyTorch 可以看成加入了 GPU 支持的 NumPy。"--清华大学教材《深度学习入门》
参考来源
- ▸NumPy 官网 | 首页,NumPy 官方介绍与生态系统概览
- ▸NumPy 官网 | History of NumPy,NumPy 项目历史与里程碑
- ▸NumPy 官网 | News,各版本发布说明与更新动态
- ▸NumPy 官方文档 | 2.0 Migration Guide,NumPy 2.0 破坏性变更与迁移指南
- ▸HandWiki | Software: NumPy,NumPy 历史、功能与生态系统的百科式梳理
