NumPy 2.x 完全指南【一】简介
文章目录
- 1. 概述
- 2. 发展历史
- 3. 生态系统
- 3.1 科学领域
- 3.2 数组库
- 3.3 数据科学
- 3.4 机器学习
- 3.5 可视化
- 4. 应用案例
- 4.1 黑洞的第一张图像
- 4.2 引力波的检测
- 4.3 体育分析
- 4.4 姿态分析
- 5. 开发语言
- 6. 开源协议
- 7. Travis Oliphant
1. 概述
NumPy
是 Numerical Python
的缩写,是一个用于在 Python
中进行科学计算的基础库,一般读作【兰派】。提供了一个多维数组对象,以及多种数组操作函数,包括数学运算、逻辑运算、形状操作、排序、选择、输入/输出、离散傅里叶变换、基础线性代数、基础统计运算、随机模拟等。
重要特性:
-
数值计算工具:提供了全面的数学函数、随机数生成器、线性代数例程、傅里叶变换等功能。
-
强大的 N 维数组:快速且多功能,
NumPy
的向量化、索引和广播概念已成为数组计算的事实标准。 -
互操作性:支持广泛的硬件和计算平台,并与分布式、
GPU
和稀疏数组库兼容。 -
高效性能:其核心是经过高度优化的
C
代码,享受Python
的灵活性,同时获得编译代码的速度。 -
易于使用:高级语法使其对于任何背景或经验水平的程序员都易于使用并富有生产力。
-
开源:在宽松的
BSD
许可证下发布,由一个充满活力、响应迅速且多样化的社区在GitHub
上开发和维护。
NumPy
官网资料地址:
- 官网网站
- 官网文档
- 邮件列表
- 源代码
- 贡献指南
- 错误报告
- 安全漏洞报告
NumPy
作为一个高效的多维数组科学计算库,广泛应用于人工智能(AI
)的各个领域中,提供了基础数据结构、高效计算等能力,几乎贯穿了数据处理、模型训练、算法实现和结果分析的等各个环节,是我们在入门 AI
时必须学习和掌握的一个基础库。
2. 发展历史
1991
年,Python
的第一个版本(0.9.0
)正式发布,凭借简单、易读等特点,在教育和科学计算领域开始逐渐流行起来。
1995
年,Jim Hugunin
开始着手开发一个针对数值计算的 Python
库,名字叫 Numeric
,提供一个高效的、多维的数组对象,专门用于处理数值数据,并支持一些基础的数学运算,Numeric
也成为了 NumPy
的前身。
1999
年,Travis Oliphant
和其他几位开发者在 Multipack
库的基础上,开始构建一个面向科学计算和工程领域的工具包,并命名为 SciPy
。旨在提供一个与 MATLAB
相似的工具集,提供丰富的数学算法和专门的科学计算功能,使用 Numeric
作为底层的数组处理库。
2001
年 8
月,SciPy 1.0
版本正式发布。
由于当时的 Numeric
库在处理更大规模的数值数据时存在性能瓶颈,还不能完全满足一些高性能计算需求,而且大佬们希望 Numeric
可以进入 Python
标准库。于是,另一组开发者开始了一个新的项目,名为 NumArray
,目标是弥补 Numeric
在处理大型数组时的不足,并优化内存管理和计算性能,并大幅改善了代码质量。
但是由于 NumArray
对于小型矩阵的操作较慢,并且其 API
的易用性并没有 Numeric
好,所以 SciPy
在迁移到 NumArray
时遇到了很大的困难。这也导致社区出现了分化问题,一部分人认为 NumArray
是 Numeric
的下一个版本,所以只开发 NumArray
,而另外一部分认为 SciPy
还是用的 Numeric
,所以只开发 Numeric
。
2005
年,在 Travis Oliphant
的主导下,社区决定将 NumArray
和 Numeric
进行合并,以便发挥各自的优点,并在此基础上推出一个独立的新库,命名为 NumPy
(Numerical Python
)。
2006
年,NumPy 1.0
版本正式发布,并迅速成为 Python
生态系统中数据分析、机器学习、科学计算领域的最重要的基础库之一。
2011
年,NumPy 1.5.0
版本引入了对 Python 3
的支持。
2024
年 6
月,Numpy 2.0.0
版本正式发布,废弃了部分不常用的接口。
目前最新的版本为 2025-1-18
发布的 2.2.2
,需要注意的是,目前其他 Python
库可能大多都还是使用的 1.25.x
或 1.26.x
版本,需要注意它们的版本要求,尽量避免兼容性问题。
3. 生态系统
在 NumPy
的基础上发展出了一些列的扩展库、工具和应用框架,覆盖了从基础数学运算到高级机器学习、可视化的广泛领域。
🔍 接下来,我们看下官网中关于生态系统和应用案例的相关介绍。
3.1 科学领域
在科学领域中,几乎所有使用 Python
的科学家都依赖 NumPy
的强大功能,在量子计算、统计计算、天文学、数学分析、建筑与工程等等领域中的 Python
库,都用到了 NumPy
。
3.2 数组库
在很多深度学习框架、数组库、机器学习平台中也用到了 NumPy
。
3.3 数据科学
NumPy
位于数据科学库丰富生态系统的核心。一个典型的探索性数据科学工作流可能如下所示:
- 数据提取、转换和加载(
ETL
):Pandas
、Intake
、PyJanitor
- 探索性分析:
Jupyter
、Seaborn
、Matplotlib
、Altair
- 建模与评估:
scikit-learn
、statsmodels
、PyMC3
、spaCy
- 仪表盘报告:
Dash
、Panel
、Voila
对于大规模数据,Dask
和 Ray
旨在实现扩展。稳定的部署依赖于数据版本控制(DVC
)、实验跟踪(MLFlow
)和工作流自动化(Airflow
、Dagster
和 Prefect
)。
3.4 机器学习
像 scikit-learn
和 SciPy
等强大机器学习库都使用 NumPy
作为基础,随着机器学习的发展,基于 NumPy
构建的库也在不断增多,比如 TensorFlow
、PyTorch
,它们在语音和图像识别、基于文本的应用、时间序列分析、视频检测、计算机视觉、自然语言处理等领域中非常流行。
集成方法(如分箱、袋装、堆叠、提升)是一类通过结合多个模型来提高预测性能的技术,其中 XGBoost
、LightGBM
和 CatBoost
等基于提升方法的高效机器学习工具。可视化机器学习模型性能的工具库 Yellowbrick
,模型解释的工具库 Eli5
等,也都集成了 NumPy
。
3.5 可视化
NumPy
是 Python
可视化生态系统中一个重要的组成部分,该生态系统包括 Matplotlib
、Seaborn
、Plotly
、Altair
、Bokeh
、Holoviz
、Vispy
、Napari
和 PyVista
等库。NumPy
加速了大规模数组的处理,使研究人员能够可视化远大于原生 Python
所能处理的数据集。
4. 应用案例
4.1 黑洞的第一张图像
黑洞是一个橙色圆圈,背景是黑色的,NumPy
与依赖于 NumPy
的 SciPy
和 Matplotlib
等库一起,使得事件视界望远镜能够拍摄到黑洞的首张图像。
4.2 引力波的检测
两个球体彼此绕行,它们在周围引起重力的变化。1916
年阿尔伯特·爱因斯坦预言了引力波,100
年后 LIGO
科学家使用 NumPy
确认了引力波的存在。
4.3 体育分析
绿色场地上的板球。板球分析通过统计建模和预测分析改善球员和团队的表现,正在改变比赛,NumPy
支持了这些分析的许多部分。
4.4 姿态分析
DeepLabCut
使用 NumPy
加速科学研究,涉及观察动物行为,以便更好地理解跨物种和时间尺度的运动控制。
5. 开发语言
NumPy
的开发语言主要包括:
Python
:基于Python
提供高层且易用的API
来处理数组和矩阵等数据结构。C
:使用C
语言实现底层,提供高效的计算性能。
6. 开源协议
NumPy
使用 BSD 3-Clause License
开源许可协议,是一种比较宽松的灵活、宽松的许可证,使开发者能够自由地使用、修改和分发代码,同时保护原作者免于因使用该代码引发的法律责任。
LICENSE
文件:
Copyright (c) 2005-2024, NumPy Developers.
All rights reserved.Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:* Redistributions of source code must retain the above copyrightnotice, this list of conditions and the following disclaimer.* Redistributions in binary form must reproduce the abovecopyright notice, this list of conditions and the followingdisclaimer in the documentation and/or other materials providedwith the distribution.* Neither the name of the NumPy Developers nor the names of anycontributors may be used to endorse or promote products derivedfrom this software without specific prior written permission.THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7. Travis Oliphant
Travis Oliphant
(特拉维斯·奥利芬特)于 1969
年 4
月 12
日出生于美国的俄勒冈州,拥有梅奥诊所的博士学位及杨百翰大学的数学与电气工程学士和硕士学位。
在科学计算和数据分析领域做出了很多广为人知的贡献,是 NumPy
和 SciPy
库的主要创始人之一,同时也是科学计算平台 Anaconda
的创始人。
大佬还出版过一本《Guide to NumPy
》: