科学应用¶
背景¶
Python被经常使用在高性能科学应用中。它之所以在学术和科研项目中得到 如此广泛的应用是因为它容易编写而且执行效果很好。
由于科学计算对高性能的要求,Python中相关操作经常借用外部库,通常是 以更快的语言(如C,或者FORTRAN来进行矩阵操作)写的。其主要的库有 Numpy, Scipy 以及 Matplotlib。关于这些库的细节超出了本指南的范围。不过, 关于Python的科学计算生态的综合介绍可以在这里找到 Python Scientific Lecture Notes。
工具¶
IPython¶
IPython 是一个加强版Python解释器,它提供了科学工作者 感兴趣的特性。其中,inline mode 允许将图像绘制到终端中(基于Qt)。 进一步的,notebook 模式支持文学化编程(literate programming, 译者注:作者这里可能是指其富文本性不是那个编程范式)与可重现性(reproducible, 译者注:作者可能是指每段程序可以单独重新计算的特性),它产生了一个基于web的 python 笔记本。这个笔记本允许您保存一些代码块,伴随着它们的计算结果以及增强的 注释(HTML,LaTex,Markdown)。这个笔记本可以被共享并以各种文件格式导出。
库¶
NumPy¶
NumPy 是一个用C和FORTRAN写的底层库,它提供一些高层 数学函数。NumPy通过多维数组和操作这些数组的函数巧妙地解决了Python运行算法较慢的问题。 任何算法只要被写成数组中的函数,就可以运行得很快。
NumPy是SciPy项目中的一部分,它被发布为一个独立的库,这样对于只需基本功能的人来说, 就不用安装SciPy的其余部分。
NumPy兼容Python 2.4-2.7.2以及3.1+。
Numba¶
Numba 是一个针对NumPy的Python编译器(即时编译器,JIT) 它通过特殊的装饰器,将标注过的Python(以及NumPy)代码编译到LLVM(Low Level Virtual Machine,底层虚拟机)中。简单地说,Python使用一种机制,用LLVM将Python代码编译为 能够在运行时执行的本地代码。
SciPy¶
SciPy 是基于NumPy并提供了更多的数学函数的库。 SciPy使用NumPy数组作为基本数据结构,并提供完成各种常见科学编程任务的模块, 包括线性代数,积分(微积分),常微分方程求解以及信号过程。
Matplotlib¶
Matplotlib 是一个可以灵活绘图的库,它 能够创建2D、3D交互式图形,并能保存成具有稿件质量(manuscript-quality)的图表。 其API很像 MATLAB,这使得MATLAB用户 很容易转移到Python。在 matplotlib gallery 中可以找到很多例子以及实现它们的源代码(可以在此基础上再创造)。
资源¶
安装这些科学计算Python包可能会有些麻烦,因为它们中很多是用Python的C扩展实现的, 这就意味着需要编译。这一节列举了各种科学计算Python发行版,它们提供了预编译编译 且易于安装的科学计算Python包。
Python扩展包的非官方Windows二进制文件(库)¶
很多人在Windows平台上做科学计算,然而众所周知的是,其中很多科学计算包在该平台上 难以构建和安装。不过, Christoph Gohlke 将一系列有用的Python包编译成了Windows的二进制文件,其数量还在不断增长。如果您在 Windows上工作,您也许想要看看。
Anaconda¶
Continuum Analytics 提供了 Anaconda Python Distribution,它 拥有所有常见的Python科学包,也包括与数据分析和大数据相关的包。Anaconda是免费的 而Continuum销售一些专有的额外组件。学术研究者可以获取这些组件的免费许可。