前言
NumPy 是什么
NumPy ,即Numeric Python 的缩写。
尽管Python 作为流行的编程语言非常灵活易用,但它本身并非为科学计算量身定做,在开发效率和执行效率上均不适合直接用于数据分析,尤其是大数据的分析和处理。 NumPy 在保留Python 语言优势的同时大大增强了科学计算和数据处理的能力。
数据科学家们希望能够用最小的编程代价在大数据集上进行数值分析,他们希望自己编写的代码可读性好、执行效率高、运行速度快,并尽可能地贴近他们熟悉的一系列数学概念。
在科学计算领域,有很多符合这些要求的解决方案。 C 、 C++ 和Fortran 等编程语言各有优势,但它们不是交互式语言,并且被很多人 认为过于复杂。常见的商业产品还有Matlab 、 Maple 和Mathematica 。这些产品提供了强大的脚本语言,但和通用编程语言比起来,功能依然很有限。另外还有一些类似于Matlab 的开源工具,如R 、 GNU Octave 和Scilab 。显然,作为编程语言,它们都不如Python 强大。
NumPy 包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。如果你的系统中已经装有**LAPACK **, NumPy 的线性代数模块会调用它,否则NumPy 将使用自己实现的库函数。 LAPACK 是一个著名的数值计算库,最初是用Fortran 写成的,Matlab同样也需要调用它。从某种意义上讲, NumPy 可以取代Matlab 和Mathematica 的部分功能,并且允许用户进行快速的交互式原型设计。
NumPy 由来
NumPy 的前身是Numeric 。 Numeric 最早发布于1995年,如今已经废弃了。
早在2001年,一些开发者受Numeric 的启发共同开创了一个叫做SciPy 的项目。 SciPy 是一个开源的Python 科学计算库,提供了类似于Matlab 、 Maple 和Mathematica 的许多功能。那段时间,人们对于Numeric 越来越不满。于是, Numarray 作为Numeric 的替代品问世了。 Numarray 在某些方面比Numeric更强大,但是它们的工作方式却截然不同。
2005年, SciPy 的早期发起人之一Travis Oliphant 决定改变这一状况,他开始将Numarray 的一些特性整合到Numeric 中。
最初的NumPy 其实是SciPy 的一部分,后来才从SciPy 中分离出来。如今, SciPy 在处理数组和矩阵时会调用NumPy 。
为什么使用NumPy
对于同样的数值计算任务,使用NumPy 要比直接编写Python 代码便捷得多。这是因为NumPy 能够直接对数组和矩阵进行操作,可以省略很多循环语句 ,其众多的数学函数也会让编写代码的工作轻松许多。
NumPy 中数组的存储效率和输入输出性能均远远优于Python 中等价的基本数据结构(如嵌套的list容器)。其能够提升的性能是与数组中元素的数目成比例的。对于大型数组的运算,使用NumPy 的确很有优势。
对于TB级的大文件, NumPy 使用内存映射文件来处理,以达到最优的数据读写性能。不过, NumPy 数组的通用性不及Python 提供的list容器,这是其不足之处。
NumPy 的大部分代码都是用C 语言写成的,这使得NumPy 比纯Python 代码高效得多。 NumPy 同样支持C 语言的API,并且允许在C 源代码上做更多的功能拓展。
|