NumPy,即 Numeric Python 的缩写,是一个优秀的开源科学计算库,并已经成为 Python 科学计算生态系统的重要组成部分。它支持高端大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
NumPy 的前身 Numeric,最早是由 Jim Hugunin 与其它协作者共同开发,2005年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
NumPy 历史
Python 编程语言最初并不是为数值计算而设计的,但早期引起了科学和工程界的关注,因此在1995年成立了一个叫 matrix-sig 的特别小组,其目的是定义一个阵列计算包。其成员包括 Python 之父 Guido van Rossum,他们实现了 Python 语法的扩展(特别是索引语法),使数组计算更容易。
- 1995年,为了扩展 Python 的陈列计算,成立了 matrix-sig 的特别小组,其目的是定义一个阵列计算包。
- 一个矩阵包的实现由 Jim Fulton 完成,然后由 Jim Hugunin 推广成为 Numeric(NumPy 的最早前身)。
- 后来一个名为 Numarray 的新软件包被编写为 Numeric 的更灵活的替代品。与 Numeric 一样,现在已弃用。Numarray 对大型阵列的操作速度更快,但在小型阵列上比 Numeric 慢,所以有一段时间两个包用于不同的用例。
- 2005年初,NumPy 开发人员 Travis Oliphant 想要围绕单个阵列包统一社区,将 Numarray 的功能移植到 Numeric,并在2006年发布 NumPy 1.0。这个新项目是 SciPy 的一部分。为了避免安装大型 SciPy 包只是为了得到一个数组对象,这个新包被分开,并称为 NumPy。
NumPy 特点
NumPy 的核心功能是“ndarray”(即 n-dimensional array,多维数组)数据结构。这是一个表示多维度、同质并且固定大小的数组对象。而由一个与此数组相关的数据类型对象来描述其数组元素的数据格式(例如,其字符组顺序、在存储器中占用的字符组数量、整数或者浮点数等等)。
使用 NumPy,开发者可以执行以下操作:
- 数组的算数和逻辑运算。
- 傅立叶变换和图形操作。
- 与线性代数有关的操作。NumPy 拥有线性代数和随机数生成的内置函数。
NumPy 应用
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用,这种组合广泛用于替代 MATLAB,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
SciPy 是一个开源的 Python 算法库和数学工具包。
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它为利用通用的图形用户界面工具包,如 Tkinter,wxPython,Qt 或 GTK+ 向应用程序嵌入式绘图提供了应用程序接口(API)。