NumPy - 简介
NumPy 简介
NumPy 是一个 Python 包。它代表"Numerical Python"。它是一个由多维数组对象和一系列用于处理数组的例程组成的库。
Numeric 是 NumPy 的前身,由 Jim Hugunin 开发。此外,还开发了另一个包 Numarray,它具有一些附加功能。2005 年,Travis Oliphant 将 Numarray 的功能融入 Numeric 包,创建了 NumPy 包。这个开源项目有很多贡献者。
使用 NumPy 进行运算
使用 NumPy,开发者可以执行以下操作:
对数组进行数学和逻辑运算。
傅里叶变换和形状操作例程。
与线性代数相关的运算。NumPy 内置了用于线性代数和随机数生成的函数。
NumPy:MATLAB 的替代品
NumPy 通常与 SciPy(科学 Python)和 Matplotlib(绘图库)等软件包结合使用。这种组合被广泛用于替代流行的技术计算平台 MATLAB。然而,Python 现已被视为 MATLAB 的替代品,是一种更现代、更完善的编程语言。
NumPy 的一大优势在于它是开源的,任何人都可以免费使用。
为什么 NumPy 比列表更快?
NumPy 数组比 Python 列表快得多,原因如下:
Aspect | NumPy | List |
---|---|---|
内存存储 | NumPy 使用连续的内存块,从而提高了缓存效率和访问速度。 | Python 列表由指向对象的指针组成,这会导致更多的内存碎片,并且速度较慢访问。 |
数据类型 | NumPy 支持同构数据类型(所有元素均为同一类型),从而提高内存利用率。 | Python 列表可以包含异构数据类型(元素可以是不同类型的),从而导致更高的内存开销。 |
运算 | NumPy 使用利用 SIMD(单指令多数据)进行并行处理的向量运算。 | Python 列表依赖于基于循环的运算,由于 Python 解释执行的开销,这些运算速度较慢。 |
效率 | NumPy 使用 C 语言编写,并针对性能进行了优化,从而减少了数值运算的执行时间。 | Python 列表以 Python 形式执行字节码,通常比编译后的 C 代码速度慢。 |
内存使用 | 由于数据类型固定且存储连续,NumPy 所需的内存更少。 | 由于每个元素都是一个单独的 Python 对象,Python 列表占用更多内存,这会带来额外的开销。 |
广播 | NumPy 支持广播,允许对不同形状的数组进行操作而无需创建额外的副本。 | Python 列表不支持广播,因此逐元素操作效率较低。 |
性能 | 由于连续的内存存储,缓存利用率更高,从而加快了访问和处理速度。 | 由于内存分配分散,缓存利用率低,导致速度变慢访问。 |
功能 | NumPy 提供了一套丰富的数学函数和工具,并针对数组操作进行了优化。 | Python 列表仅限于基本运算,缺乏高级数学功能。 |
NumPy 使用哪种语言编写?
NumPy 主要使用以下语言编写 -
C:NumPy 的核心功能,包括数组对象的实现和基本操作,都是用 C 语言编写的。这提供了 NumPy 闻名的高性能和高效率。
Python:NumPy 的用户界面和高级功能均使用 Python 编写。这使得它易于使用并与其他 Python 库集成。
Fortran:NumPy 中的一些数值例程,尤其是与线性代数相关的例程(例如 LAPACK 和 BLAS),都是用 Fortran 编写的。Fortran 以其高效的数值计算而闻名,这提升了 NumPy 在特定类型运算上的性能。