凭借着 NumPy
和 SciPy
提供的高阶数组和矩阵操作,Python
成为科学计算应用的主流语言。NumPy
实现了多维同质数组(homogeneous array
)和矩阵,这些数据结构不但能处理数字,还能存放其他由用户定义的记录。通过 NumPy
,用户能对这些数据结构里的元素进行高效的操作。
SciPy
是基于 NumPy
的另一个库,它提供了很多跟科学计算有关的算法,专为线性代数
、数值积分
和统计学
而设计。SciPy
的高效和可靠性归功于其背后的 C
和 Fortran
代码,而这些跟计算有关的部分都源自于 Netlib
库(http://www.netlib.org
)。换句话说,SciPy
把基于C
和 Fortran
的工业级数学计算功能用交互式且高度抽象的 Python
包装起来,让科学家如鱼得水。
下面示例 是一个很简短的演示,从中可以窥见一些 NumPy 二维数组的基本操作
import numpy # 安装 NumPy 之后,导入它(NumPy 并不是 Python 标准库的一部分)
a = numpy.arange(12) # 新建一个 0~11 的整数的 numpy.ndarry,然后把它打印出来
print(a)
# [ 0 1 2 3 4 5 6 7 8 9 10 11]
print(type(a))
# <class 'numpy.ndarray'>
print(a.shape) # 看看数组的维度,它是一个一维的、有 12 个元素的数组
# (12,)
a.shape = 3, 4 # 把数组变成二维的,然后把它打印出来看看。
print(a)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
print(a[2]) # 打印出第 2 行。
# [ 8 9 10 11]
print(a[2, 1]) # 打印第 2 行第 1 列的元素
# 9
print(a[:, 1]) # 把第 1 列打印出来
# [1 5 9]
print(a.transpose()) # 把行和列交换,就得到了一个新数组
# [[ 0 4 8]
# [ 1 5 9]
# [ 2 6 10]
# [ 3 7 11]]
以上的内容仅仅是九牛一毛。NumPy
和 SciPy
都是异常强大的库,也是其他一些很有用的工具的基石。Pandas
(http://pandas.pydata.org
)和 Blaze
(http://blaze.pydata.org
)数据分析库就以它们为基础,提供了高效的且能存储非数值类数据的数组类型,和读写常见数据文件格式(例如 csv
、xls
、SQL
转储和 HDF5
)的功能。