AI万址
NumPy

NumPy

NumPy是Python科学计算的基石,提供N维数组ndarray和数学运算函数,Pandas、SciPy、scikit-learn等库均构建其上,2.5版本最新发布。

NumPy
访问官网
基本信息详情
开发公司社区项目,创始人 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。

核心功能

01

ndarray 多维数组

NumPy 的核心数据结构。连续内存块存储,固定 dtype,支持任意维度。一个 1000x1000 的浮点矩阵,NumPy 占 8MB 连续内存,Python list 要碎成上千个对象。切片返回视图而非副本,内存零复制。

02

向量化运算(ufunc)

通用函数在 C 层做循环,用 SIMD 指令并行。np.sin(arr) 比纯 Python 循环快约 200 倍。支持加减乘除、三角函数、指数对数、比较运算,全部自动逐元素执行。

03

广播机制

不同形状的数组自动扩展做运算。一个 (3,1) 数组加一个 (1,3) 数组,结果自动变成 (3,3)。不用手动复制数据,不用写循环。这个机制后来被几乎所有数组库学习。

04

索引与切片

基本切片、花式索引、布尔索引全覆盖。步长切片通过 strides 元数据实现,转置 arr.T 只改元数据不移动数据。Fancy indexing 返回副本而非视图。

05

线性代数

np.linalg 提供矩阵乘法、求逆、行列式、特征值、SVD、QR 分解等。底层调 LAPACK 和 BLAS,性能接近原生 Fortran。2.2 版本新增 matvecvecmat 函数。

06

随机数生成

np.random.default_rng() 提供现代随机数生成器,支持各种分布。比旧版 np.random 更快、更安全、可种子化。

适合谁

适合:所有用 Python 做数值计算的人。数据科学家用它做数据清洗和变换,机器学习工程师用它准备训练数据,科研人员用它做物理仿真和统计分析,后端工程师用它做数值处理。无论你是刚入门还是资深专家,NumPy 都是必备工具。

不适合:需要 GPU 加速做大规模并行计算的场景。NumPy 本身只跑 CPU,GPU 计算用 CuPy 或 JAX。需要分布式计算跑超大规模数据的场景用 Dask。需要自动微分做深度学习的用 PyTorch 或 TensorFlow。但这些工具的 API 都和 NumPy 兼容,学了 NumPy 等于学了它们的入门。

同类竞品对比

维度NumPyCuPyJAXPyTorch Tensor
核心定位CPU 数组计算GPU 数组计算可微分数组计算深度学习张量
运行设备CPUNVIDIA GPUCPU/GPU/TPUCPU/GPU
自动微分不支持不支持原生支持原生支持
API 兼容自身标准NumPy 兼容NumPy 兼容类 NumPy
分布式不支持不支持原生支持通过 DDP
价格免费开源免费开源免费开源免费开源

FAQ

Q

NumPy 2.0 破坏性变更影响大吗?

A

有 ABI break、类型提升规则修改和 C API 变更。纯 Python 用户基本不受影响,但分发二进制包的下游库需要重新编译。官方提供了 Ruff NPY201 规则自动修复大部分 Python 代码变更。

Q

NumPy 能做 GPU 加速吗?

A

原生不能。NumPy 只跑 CPU。要做 GPU 加速用 CuPy(API 兼容 NumPy)或 JAX。也可以通过 Array API 标准让 scikit-learn 等库接受 CuPy 数组间接实现 GPU 计算。

Q

为什么不用 Python list 而用 NumPy?

A

三个原因:速度(C 层循环比 Python 快 100-200 倍)、内存(连续存储 vs 碎片化对象)、功能(广播、索引、线性代数等 list 做不了)。

Q

版本迭代节奏怎样?

A

大约每半年一个版本。2.3(2025 年 6 月)改进自由线程支持,2.4(2025 年 12 月)增加 __numpy_dtype__ 协议,2.5(2026 年 6 月)移除 distutils、放弃 Python 3.11 支持。节奏稳定,向后兼容有保证但跨大版本序列化模型不保证兼容。

Q

商业使用有限制吗?

A

BSD 许可证,商业使用几乎无限制。可以免费用、修改、分发、闭源使用,只需保留版权声明。

Q

怎么学最快?

A

官方文档是最好的教材。从 np.array 创建数组开始,学 indexing、broadcasting、ufunc 三个概念就够入门。进阶看 Travis Oliphant 的《Guide to NumPy》。

更新动态

客户评论

作为开源基础设施项目,NumPy 没有传统客户评分,但社区评价极高。

"NumPy 如同科学计算宇宙的引力场,无形却支撑着一切。"--CSDN 技术评测

"从火星探测器处理图像数据,到 AlphaFold 预测蛋白质结构,NumPy 是底层基石。"--NumPy 官方历史页

"PyTorch 可以看成加入了 GPU 支持的 NumPy。"--清华大学教材《深度学习入门》

参考来源