如果利用数组来做高级的数字处理是你的日常工作,那么 NumPy 和 SciPy 应该是你的常用武器。

凭借着 NumPy 和 SciPy 提供的高阶数组和矩阵操作,Python 成为科学计算应用的主流语言。NumPy 实现了多维同质数组(homogeneous array)和矩阵,这些数据结构不但能处理数字,还能存放其他由用户定义的记录。通过 NumPy,用户能对这些数据结构里的元素进行高效的操作。

SciPy 是基于 NumPy 的另一个库,它提供了很多跟科学计算有关的算法,专为线性代数、数值积分和统计学而设计。SciPy 的高效和可靠性 归功于其背后的 C 和 Fortran 代码,而这些跟计算有关的部分都源自于 Netlib库。换句话说,SciPy 把基于 C 和 Fortran 的工业级数学计算功能用交互式且高度抽象的 Python 包装起来,让科学家如鱼得水。

对 numpy.ndarray 的行和列进行基本操作:

>>> import numpy
>>> a = numpy.arange(12)
>>> a
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
>>> type(a)
<type 'numpy.ndarray'>
>>> a.shape
(12,)   # 数组的维度,它是一个一维的、有 12 个元素的数组
>>> a.shape = 3, 4
>>> a
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
>>> a[2]
array([ 8,  9, 10, 11])
>>> a[2, 1]
9
>>> a[:, 1]
array([1, 5, 9])
>>> a.transpose()
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11]])

NumPy也可以对 numpy.ndarray 中的元素进行抽象的读取、保存和其他操作。

NumPy 和 SciPy 的安装可能会比较费劲。在Installing the SciPy Stack页面,SciPy.org 建议找一个科学计算 Python 的分发渠道帮忙,比如 Anacoda、Enthought Canopy、WinPython,等等。

以上的内容仅仅是九牛一毛。NumPy 和 SciPy 都是异常强大的库,也是其他一些很有用的工具的基石。PandasBlaze数据分析库就以它们为基础,提供了高效的且能存储非数值类数据的数组类型,和读写常见数据文件格式(例如 csv、xls、SQL 转储和 HDF5)的功能。因此,要详细介绍 NumPy 和 SciPy 的话,不写成几本书是不可能的。

整理自《流畅的Python》关于numpy有关的内容。