Skip navigation.

Posts tagged with "scipy"

数值蟒

, , ,

因作课题的需要,使用python作为粘合剂连接多个程序,包括商业的、开源的和自己写的。其中需要对中间数据进行处理作一些数值计算,这个工作可以在fortran中完成的,但是需要将数据从python程序流中导出导入,显得麻烦。所以还是选择SciPy, NumPy来做,它们已经把矩阵这种数值计算常用的对象包装完整,并在此基础上封装了多个开源的数值计算包比如blas, linalg, fitpack 等等,对付一般的计算足够用了。

之前对于 NumPy, Numeric, Numarray, Scipy 之间的关系非常困惑,在看了History of Scipy 之后,有了一些大致的了解,看来 NumPy+SciPy 将是数值蟒的首选了。

Scipy和Numpy的前世今生

,

关于numpy, numeric, numarray, scipy 复杂的演化历史在scipy的网站上有相关解释,随手翻译了一下


:heart: Numeric的诞生

故事开始于1995年。Jim Hugunin在Jim Fulton, David Ascher, Paul DuBois, Konrad Hinsen等众人的帮助下开发了Numeric。 不过当时Numeric就有了很多名字:Numerical Python, Numerical, NumPy。 比如 SourceForge 上的名字是 numpy,而CVS中的名字是 Numerical。另外Konrad Hinsen 开发了 ScientificPython 程序包,他把它也称为 Numerical Python。

:heart: SciPy的诞生

一些人在他们的科研代码中使用 Numeric 并开发了自己的模块。2001左右, Travis Oliphant, Eric Jones 和 Pearu Peterson 将他们的模块整合到一起,释放出一个超级程序包,SciPy 就此诞生。

:heart: numarray的诞生

Numeric的开发进度渐渐缓慢下来,人们想扩展它的功能,而且希望 Numeric可以进入python标准库,但是Guido van Rossum 指出根据Numeric当时的开发情况根本无法维护下去。

于是,Space Science Telescope Institute 的 Perry Greenfield, Todd Miller和Rick White开发了numarray来替代Numeric。numarray的代码质量基本达到python的水平,具有相当的灵活性,在与其他的替代品的比较中也显示出了优势。而且操作大型矩阵速度很快。

:heart: 分裂: Numeric vs. numarray

遗憾的是,numarray对于小型矩阵的操作相当慢。而且numarray用于创建ufuncs的C API没有Numeric的方便。导致SciPy从Numeric转向numarray遇到很大困难。整个社区因此产生分裂:一些人只为numarray写代码,把它看作下一代的Numeric,而其他人为Numeric写代码,因为他们需要SciPy。

:heart: 合并,NumPy的诞生

2005初,Travis Oliphant想把社区重新联合回归到单个数组(array)程序包。 他重构了Numeric的代码,使其更易维护,能够灵活的实现numarray的特性。他把这个新的多维数组项目命名为 SciPy core,试图将它用于SciPy。

问题是,人们错误的认为Numeric已经被SciPy包容了,他们必须安装SciPy才能使用数组对象。于是这个多维数组项目被赋予一个全新的名字 'NumPy'。