SciPy 0.7.0 发行说明#
SciPy 0.7.0 是 16 个月辛勤工作的结晶。它包含许多新功能、大量错误修复、改进的测试覆盖率和更好的文档。此版本中进行了一些弃用和 API 更改,以下有说明。建议所有用户升级到此版本,因为它包含大量的错误修复和优化。此外,我们的开发重点将转移到 0.7.x 分支上的错误修复版本,以及在开发主干上添加新功能。此版本需要 Python 2.4 或 2.5 以及 NumPy 1.2 或更高版本。
请注意,SciPy 仍被视为处于“Beta”状态,我们正在努力发布 SciPy 1.0.0。1.0.0 版本的发布将标志着 SciPy 开发的一个重要里程碑,在此之后更改包结构或 API 将变得更加困难。尽管这些 1.0 版之前的版本被视为处于“Beta”状态,但我们致力于使其尽可能没有错误。例如,除了修复此版本中的大量错误外,自上一个版本以来,我们还使单元测试的数量增加了一倍。
然而,在 1.0 版本发布之前,我们正在积极审查和完善其功能、组织和接口。这样做是为了使软件包尽可能连贯、直观和实用。为了实现这一目标,我们需要用户社区的帮助。具体来说,我们需要关于项目各个方面的反馈——从我们实现的算法到函数调用签名的细节,无所不包。
在过去一年中,我们看到社区参与度迅速提高,并且进行了大量基础设施改进,以降低贡献门槛(例如,更明确的编码标准、改进的测试基础设施、更好的文档工具)。在未来一年中,我们希望看到这种趋势继续下去,并邀请所有人更积极地参与进来。
Python 2.6 和 3.0#
已投入大量工作使 SciPy 与 Python 2.6 兼容;然而,在这方面仍存在一些问题。2.6 支持的主要问题是 NumPy。在 UNIX(包括 Mac OS X)上,NumPy 1.2.1 基本可用,但有一些注意事项。在 Windows 上,存在与编译过程相关的问题。即将发布的 NumPy 1.3 版本将解决这些问题。SciPy 0.7 2.6 支持的任何剩余问题将在错误修复版本中解决。
Python 3.0 完全不支持;它需要将 NumPy 移植到 Python 3.0。这需要巨大的努力,因为大量 C 代码必须被移植。向 3.0 的过渡仍在考虑中;目前,我们还没有这次过渡的时间表或路线图。
主要文档改进#
SciPy 文档得到了极大改进;您可以在线查看 HTML 参考手册或将其下载为 PDF 文件。新的参考指南是使用流行的 Sphinx 工具构建的。
此版本还包含一个更新的教程,该教程自 2005 年 SciPy 移植到 NumPy 以来一直未提供。尽管不全面,该教程展示了如何使用 SciPy 的几个基本部分。它还包含了来自 numarray
手册的 ndimage
文档。
尽管如此,文档方面仍需更多努力。幸运的是,现在为 SciPy 文档做贡献比以前更容易了:如果您发现其中某一部分需要改进,并希望帮助我们,请在我们的基于网络的文档编辑器 https://docs.scipy.org.cn/ 中注册用户名并更正问题。
运行测试#
NumPy 1.2 引入了一个基于 nose 的新测试框架。从该版本开始,SciPy 现在也使用新的 NumPy 测试框架。利用新测试框架需要 nose
0.10 或更高版本。新框架的一个主要优点是它极大地简化了单元测试的编写——考虑到测试数量的迅速增加,这已经取得了回报。要运行完整的测试套件
>>> import scipy
>>> scipy.test('full')
更多信息请参见NumPy/SciPy 测试指南。
我们也大大提高了我们的测试覆盖率。0.6.0 版本中只有略多于 2,000 个单元测试;而此版本使该数量几乎翻倍,达到略多于 4,000 个单元测试。
构建 SciPy#
已添加对 NumScons 的支持。NumScons 是 NumPy/SciPy 的一个试验性的新构建系统,其核心使用 SCons。
SCons 是一个下一代构建系统,旨在取代老牌的 Make
,并集成了 autoconf
/automake
和 ccache
的功能。SCons 是用 Python 编写的,其配置文件是 Python 脚本。NumScons 旨在取代 NumPy 的自定义版本 distutils
,提供更高级的功能,例如 autoconf
、改进的 Fortran 支持、更多工具,并支持 numpy.distutils
/scons
协作。
沙盒已移除#
2005 年将 SciPy 移植到 NumPy 时,一些包和模块被移入 scipy.sandbox
。沙盒作为正在快速开发且 API 不断变化的包的暂存区。它也是损坏代码的存放地。沙盒很好地完成了其使命,但开始造成混淆。因此 scipy.sandbox
被移除。大部分代码被移入 scipy
,一些代码被制作成 scikit
,其余代码被直接删除,因为其功能已被其他代码取代。
稀疏矩阵#
稀疏矩阵得到了广泛改进。现在支持 int8
、uint32
等整数 dtype。新增了两种稀疏格式
新类
dia_matrix
:稀疏对角线格式新类
bsr_matrix
:块 CSR 格式
新增了几个稀疏矩阵构造函数
sparse.kron
:稀疏 Kronecker 积sparse.bmat
:numpy.bmat
的稀疏版本sparse.vstack
:numpy.vstack
的稀疏版本sparse.hstack
:numpy.hstack
的稀疏版本
已添加子矩阵和非零值的提取功能
sparse.tril
:提取下三角sparse.triu
:提取上三角sparse.find
:非零值及其索引
csr_matrix
和 csc_matrix
现在支持切片和高级索引(例如 A[1:3, 4:7]
和 A[[3,2,6,8],:]
)。现在可以在所有稀疏格式之间进行转换
使用成员函数,例如
.tocsr()
和.tolil()
使用
.asformat()
成员函数,例如A.asformat('csr')
使用构造函数
A = lil_matrix([[1,2]]); B = csr_matrix(A)
所有稀疏构造函数现在都接受密集矩阵和列表的列表。例如
A = csr_matrix( rand(3,3) )
和B = lil_matrix( [[1,2],[3,4]] )
spdiags
函数中对角线的处理方式已更改。它现在与 MATLAB(TM) 中同名函数保持一致。
对格式转换和稀疏矩阵算术运算进行了大量效率改进。最后,此版本包含了大量的错误修复。
统计包#
已添加掩码数组的统计函数,可通过 scipy.stats.mstats
访问。这些函数与其在 scipy.stats
中的对应函数相似,但尚未验证其接口和算法是否完全相同。
统计函数中的几个错误得到了修复,其中 kstest
和 percentileofscore
获得了新的关键字参数。
已添加针对 mean
、median
、var
、std
、cov
和 corrcoef
的弃用警告。这些函数应该被它们的 NumPy 对应函数取代。但请注意,这些函数在 scipy.stats
和 NumPy 版本之间的一些默认选项有所不同。
对 stats.distributions
进行了大量错误修复:所有通用方法现在都能正常工作,单个分布中的几个方法得到了修正。然而,在高阶矩(skew
、kurtosis
)和熵方面仍存在一些问题。最大似然估计器 fit
对于某些分布无法直接使用——在某些情况下,起始值必须仔细选择,在其他情况下,最大似然法的通用实现可能不是数值上合适的估计方法。
我们预计在 SciPy 的下一个版本中会有更多的错误修复、数值精度提高和增强。
IO 包重构#
NumPy 和 SciPy 中的 IO 代码正在进行广泛的重构。NumPy 将作为读写 NumPy 数组的基本代码的存放地,而 SciPy 将包含各种数据格式(数据、音频、视频、图像、matlab 等)的文件读写器。
scipy.io
中的一些函数已被弃用,并将在 0.8.0 版本中移除,包括 npfile
、save
、load
、create_module
、create_shelf
、objload
、objsave
、fopen
、read_array
、write_array
、fread
、fwrite
、bswap
、packbits
、unpackbits
和 convert_objectarray
。其中一些函数已被 NumPy 的原始读写功能、内存映射功能或数组方法取代。其他一些已从 SciPy 移至 NumPy,因为基本的数组读写功能现在由 NumPy 处理。
Matlab (TM) 文件读写器有了许多改进
默认版本 5
v5 写入器支持结构体、单元格数组和对象
v5 读写器支持函数句柄和 64 位整数
新增
struct_as_record
关键字参数到loadmat
,它将 matlab 中的结构体数组作为 numpy 中的记录数组加载字符串数组具有
dtype='U...'
而不是dtype=object
loadmat
不再压缩单例维度,即默认情况下squeeze_me=False
新层次聚类模块#
此模块为 scipy.cluster
包添加了新的层次聚类功能。函数接口与 MATLAB(TM) 统计工具箱中提供的函数类似,以帮助更轻松地迁移到 NumPy/SciPy 框架。实现的链接方法包括 single、complete、average、weighted、centroid、median 和 ward。
此外,还提供了几个用于计算不一致性统计量、同表现距离和后代之间最大距离的函数。fcluster
和 fclusterdata
函数将层次聚类转换为一组扁平聚类。由于这些扁平聚类是通过将树切割成一片森林生成的,因此 leaders
函数接受一个链接和一个扁平聚类,并找到森林中每棵树的根。ClusterNode
类将层次聚类表示为可字段导航的树对象。to_tree
将矩阵编码的层次聚类转换为 ClusterNode
对象。提供了在 MATLAB 和 SciPy 链接编码之间进行转换的例程。最后,dendrogram
函数使用 matplotlib 将层次聚类绘制为树状图。
新空间包#
新的空间包包含一系列空间算法和数据结构,可用于空间统计和聚类应用。它包括用于计算精确和近似最近邻的快速编译代码,以及一个具有相同接口的纯 Python kd-tree,但支持注解和各种其他算法。随着用户需求变得更清晰,这两个模块的 API 可能会有所改变。
它还包含一个 distance
模块,其中包含一系列用于计算向量间距离的距离和相异度函数,这对于空间统计、聚类和 kd-trees 非常有用。提供的距离和相异度函数包括 Bray-Curtis、Canberra、Chebyshev、City Block、Cosine、Dice、Euclidean、Hamming、Jaccard、Kulsinski、Mahalanobis、Matching、Minkowski、Rogers-Tanimoto、Russell-Rao、Squared Euclidean、Standardized Euclidean、Sokal-Michener、Sokal-Sneath 和 Yule。
pdist
函数计算向量集中所有无序向量对之间的成对距离。cdist
计算两个向量集的笛卡尔积中所有向量对的距离。成对距离矩阵以压缩形式存储;只存储上三角部分。squareform
在方阵和压缩形式之间转换距离矩阵。
fftpack 包重构#
FFTW2、FFTW3、MKL 和 DJBFFT 封装器已被移除。只保留了 (NETLIB) fftpack。通过专注于一个后端,我们希望更轻松地添加新功能——例如 float32 支持。
新常数包#
scipy.constants
提供了一系列物理常数和转换因子。这些常数取自 CODATA 2002 年基本物理常数推荐值。它们可以在 physics.nist.gov/constants 找到。这些值以元组形式存储在字典 physical_constants 中,元组包含值、单位和相对精度——按此顺序。除非另有说明,所有常数均采用 SI 单位。提供了几个辅助函数。
新径向基函数模块#
scipy.interpolate
现在包含一个径向基函数模块。径向基函数可用于 n 维散射数据的平滑/插值,但在观察数据范围之外进行外推时应谨慎使用。
新复数ODE积分器#
scipy.integrate.ode
现在包含 ZVODE 复值常微分方程求解器(由 Peter N. Brown、Alan C. Hindmarsh 和 George D. Byrne 编写)的封装器。
新广义对称和厄米特特征值问题求解器#
scipy.linalg.eigh
现在包含更多 LAPACK 对称和厄米特特征值问题求解器的封装器。用户现在可以解决广义问题,只选择一个特征值范围,并选择使用更快的算法,但代价是内存使用量增加。scipy.linalg.eigh
的签名也相应地发生了变化。
插值包中的错误修复#
如果插值数据有超过 2 个维度,并且 axis 关键字设置为非默认值,scipy.interpolate.interp1d
的返回值形状曾经不正确。这个问题已经修复。此外,如果输入是标量,interp1d
现在返回一个标量(0D 数组)。scipy.interpolate.interp1d
的用户如果其代码依赖于之前的行为,则可能需要修改。
Weave 清理#
对 scipy.weave
进行了大量改进。blitz++
已由作者重新授权,以兼容 SciPy 许可证。wx_spec.py
已被移除。
已知问题#
以下是 SciPy 0.7.0 的已知问题
Windows 上的 weave 测试失败:这些是已知问题,正在修订中。
使用 gcc 4.3 时的 weave 测试失败(std::labs):这是 gcc 4.3 的一个错误。一个解决方法是在 scipy/weave/blitz/blitz/funcs.h 文件(第 27 行)中添加 #include <cstdlib>。您可以在已安装的 SciPy(在 site-packages 中)中进行更改。