SciPy 0.7.0发行说明

SciPy 0.7.0是16个月辛勤工作的顶峰。它包含许多新功能、大量错误修复、改进的测试覆盖率和更好的文档。此版本中有许多弃用和API更改,如下所述。我们鼓励所有用户升级到此版本,因为有大量的错误修复和优化。此外,我们的开发注意力现在将转移到0.7.x分支上的错误修复版本,以及在开发主干上添加新功能。此版本需要Python2.4或2.5以及NumPy 1.2或更高版本。

请注意,本网站仍被认为处于“测试版”状态,因为我们正在努力实现本网站的1.0.0版本。1.0.0版本将标志着SciPy开发过程中的一个重要里程碑,之后更改包结构或API将变得更加困难。虽然这些1.0之前的版本被认为是“测试版”,但我们致力于让它们尽可能地没有bug。例如,除了修复此版本中的大量错误外,自上次发布以来,我们还将单元测试的数量增加了一倍。

但是,在1.0版本之前,我们正在积极审查和改进功能、组织和界面。这样做是为了使软件包尽可能连贯、直观和有用。要实现这一点,我们需要来自用户社区的帮助。具体地说,我们需要关于项目各个方面的反馈--从我们实现的算法到函数调用签名的详细信息。

在过去的一年里,我们看到社区参与的迅速增加,以及大量基础设施的改进,以降低对屏障的贡献(例如,更明确的编码标准,改进的测试基础设施,更好的文档工具)。在接下来的一年里,我们希望看到这一趋势继续下去,并邀请每个人都更多地参与进来。

Python 2.6和3.0

为了使SciPy与Python2.6兼容,已经做了大量的工作;然而,在这方面仍然存在一些问题。2.6支持的主要问题是NumPy。在UNIX(包括MacOSX)上,NumPy 1.2.1大部分都可以工作,但有几点需要注意。在Windows上,存在与编译过程相关的问题。即将发布的NumPy 1.3版本将解决这些问题。对SciPy0.7的2.6支持的任何剩余问题将在错误修复版本中解决。

Python3.0根本不受支持;它需要将NumPy移植到Python3.0。这需要付出巨大的努力,因为必须移植大量的C代码。向3.0的过渡仍在考虑之中;目前,我们还没有这个过渡的时间表或路线图。

主要文档改进

SciPy文档得到了极大的改进;您可以查看HTML参考手册 online 或将其下载为PDF文件。新的参考指南是使用流行的 Sphinx tool

此版本还包括更新后的教程,自从2005年将SciPy移植到NumPy之后就再也没有提供过该教程。虽然不全面,但本教程展示了如何使用Scipy的几个基本部分。它还包括 ndimage 文档来自 numarray 手册。

尽管如此,在文档方面还需要付出更多努力。幸运的是,现在为Scipy文档做贡献比以前更容易了:如果您发现其中有一部分需要改进,并且想要帮助我们,请在我们位于https://docs.scipy.org/的基于Web的文档编辑器中注册用户名并更正问题。

运行测试

NumPy 1.2引入了一个新的测试框架,该框架基于 nose 。从这个版本开始,SciPy现在也使用了新的NumPy测试框架。利用新的测试框架需要 nose 版本0.10或更高版本。新框架的一个主要优势是它极大地简化了单元测试的编写-考虑到测试的快速增加,这一切都已经得到了回报。要运行完整的测试套件,请执行以下操作:

>>> import scipy
>>> scipy.test('full')

详情请参阅 The NumPy/SciPy Testing Guide

我们还极大地提高了我们的测试覆盖率。在0.6.0版本中只有2000多个单元测试;这个版本几乎是这个数字的两倍,只有4000多个单元测试。

构建Science Py

添加了对NumScons的支持。NumScons是NumPy/SciPy的试探性新构建系统,使用 SCons 在它的核心。

SCons是下一代构建系统,旨在取代受人尊敬的 Make with the integrated functionality of autoconf/automakeccache. Scons is written in Python and its configuration files are Python scripts. NumScons is meant to replace NumPy's custom version of distutils providing more advanced functionality, such as autoconf, improved fortran support, more tools, and support for numpy.distutils/scons 合作。

已移除沙盒

在2005年将SciPy移植到NumPy时,几个包和模块被移到 scipy.sandbox 。沙箱是正在快速开发且API不断变化的包的中转站。它也是一个被破坏的代码可以生存的地方。沙箱已经很好地实现了它的目的,但也开始创建念力。因此, scipy.sandbox 被移除了。大部分代码被移到 scipy ,一些代码被制成一个 scikit ,并且剩余的代码刚刚被删除,因为该功能已被其他代码取代。

稀疏矩阵

稀疏矩阵有了广泛的改进。现在支持整数数据类型,如 int8uint32 等。新增了两种稀疏格式:

  • 新班级 dia_matrix :稀疏对角线格式

  • 新班级 bsr_matrix :挡路企业社会责任格式

添加了几个新的稀疏矩阵构造函数:

  • sparse.kron :稀疏Kronecker产品

  • sparse.bmat : sparse version of numpy.bmat

  • sparse.vstack : sparse version of numpy.vstack

  • sparse.hstack : sparse version of numpy.hstack

添加了子矩阵提取和非零值:

  • sparse.tril :提取下三角形

  • sparse.triu :提取上三角形

  • sparse.find :非零值及其索引

csr_matrixcsc_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) ) and B = lil_matrix( [[1,2],[3,4]] )

中对角线的处理 spdiags 功能已更改。它现在与同名的MATLAB(TM)函数一致。

已经对格式转换和稀疏矩阵运算进行了大量的效率改进。最后,此版本包含许多错误修复。

统计软件包

已添加掩码数组的统计函数,可通过 scipy.stats.mstats 。这些功能与中的对应功能相似 scipy.stats 但尚未验证它们是否具有相同的接口和算法。

修复了统计函数的几个错误,其中 kstestpercentileofscore 获得了新的关键字参数。

添加了以下项的弃用警告 meanmedianvarstdcov ,以及 corrcoef 。这些函数应该用它们的呆板对应函数来代替。但是,请注意,某些默认选项在 scipy.stats 以及这些函数的模糊版本。

修复了大量错误,以 stats.distributions :所有泛型方法现在都可以正常工作,个别发行版中的几个方法已更正。然而,一些问题仍然存在于更高的时刻。 (skewkurtosis )和熵。最大似然估计器, fit 在某些情况下,必须仔细选择起始值,而在其他情况下,最大似然法的通用实现可能不是数值上合适的估计方法。

我们预计在下一版本的Scipy中会有更多的错误修复、数值精度的提高和增强。

IO封装返工

NumPy和SciPy中的IO代码正在进行广泛的修改。NumPy将是读写NumPy数组的基本代码所在的位置,而SciPy将容纳各种数据格式(数据、音频、视频、图像、MATLAB等)的文件读取器和写入器。

中的几个函数 scipy.io 已弃用,将在0.8.0版本中删除,包括 npfilesaveloadcreate_modulecreate_shelfobjloadobjsavefopenread_arraywrite_arrayfreadfwritebswappackbitsunpackbits ,以及 convert_objectarray 。其中一些函数已经被NumPy的原始读写功能、内存映射功能或数组方法所取代。因为基本的数组读写功能现在由NumPy处理,所以其他的已经从SciPy移到了NumPy。

Matlab(TM)文件读取器/写入器有许多改进:

  • 默认版本5

  • 用于结构、单元数组和对象的V5编写器

  • 用于函数句柄和64位整数的V5读取器/写入器

  • 将STRUCT_AS_RECORD关键字参数新到 loadmat ,它将matlab中的struct数组加载为numpy中的记录数组。

  • 字符串数组具有 dtype='U...' 而不是 dtype=object

  • loadmat 不再挤压单个维度,即 squeeze_me=False 默认情况下,

新的层次聚类模块

本模块将新的分层群集功能添加到 scipy.cluster 包裹。这些功能接口类似于MATLAB(TM)的统计工具箱提供的功能,以帮助更容易地迁移到NumPy/SciPy框架,实施的链接方法包括单一、完全、平均、加权、质心、中值和Ward。

此外,还提供了几个函数,用于计算不一致性统计信息、共生距离和子代之间的最大距离。这个 fclusterfclusterdata 函数将层次群集转换为一组平面群集。由于这些扁平的簇是通过将树砍成树木森林而生成的,所以 leaders 函数采用链接和平面聚类,并查找林中每棵树的根。这个 ClusterNode 类将分层群集表示为字段可导航树对象。 to_tree 将矩阵编码的分层群集转换为 ClusterNode 对象。提供了在MATLAB和SciPy链接编码之间进行转换的例程。最后,一个 dendrogram 函数使用matplotlib将层次聚类绘制为树状图。

新建空间包

新的空间包包含一组空间算法和数据结构,对空间统计和群集应用程序很有用。它包括用于计算精确和近似最近邻居的快速编译代码,以及具有相同接口的纯python kd-tree,但支持注释和各种其他算法。随着用户需求变得更加清晰,这两个模块的API可能会有所变化。

它还包括一个 distance 模块,包含用于计算向量之间距离的距离和相异函数的集合,这对于空间统计、聚类和kd-tree非常有用。提供的距离和相异函数包括布雷-柯蒂斯、堪培拉、切比雪夫、城市挡路、余弦、骰子、欧几里德、汉明、贾卡德、库尔辛斯基、马哈拉诺比斯、Matching、明可夫斯基、罗杰斯-塔尼莫托、罗素-拉奥、平方欧几里德、标准化欧几里德、索卡尔-米切纳、索卡尔-斯尼斯和尤勒。

这个 pdist 函数计算一组向量中所有无序向量对之间的成对距离。这个 cdist 计算两组矢量的笛卡尔乘积中所有矢量对的距离。成对距离矩阵以压缩形式存储;只存储上三角形。 squareform 在正方形和压缩形式之间转换距离矩阵。

修改后的fftpack包

FFTW2、FFTW3、MKL和DJBFFT包装器已删除。只剩下(NETLIB)fftpack。通过专注于一个后端,我们希望能够更轻松地添加新功能,比如对Float32的支持。

新常量包

scipy.constants 提供物理常数和转换因子的集合。这些常数取自CODATA推荐值的基本物理常数:2002。它们可以在Physiics.nist.gov/constants中找到。这些值以包含值、单位和相对精度的元组的形式存储在字典Physical_Constants中-按该顺序排列。除非另有说明,否则所有常量均以SI单位表示。提供了几个帮助器函数。

新的径向基函数模块

scipy.interpolate 现在包含一个径向基函数模块。径向基函数可用于平滑/内插n维的散乱数据,但在进行观测数据范围之外的外推时应谨慎使用。

一种新型复数常微分方程积分器

scipy.integrate.ode 现在包含ZVODE复值常微分方程解算器的包装器(由Peter N.Brown、Alan C.Hindmarsh和George D.Byrne编写)。

一种新的广义对称厄米特征值问题求解器

scipy.linalg.eigh 现在包含更多LAPACK对称和厄米特特征值问题解算器的包装器。用户现在可以解决一般问题,只选择一定范围的特征值,并选择以增加内存使用量为代价使用更快的算法。签名者的签名 scipy.linalg.eigh 做了相应的改变。

修复内插包中的错误

的返回值的形状 scipy.interpolate.interp1d 如果插值数据具有2个以上的维度,并且AXIS关键字设置为非默认值,则通常是不正确的。此问题已修复。而且呢, interp1d 如果输入是标量,则现在返回标量(0D数组)。的用户 scipy.interpolate.interp1d 如果代码依赖于以前的行为,则可能需要修改代码。

编织清理

在许多方面都有改进 scipy.weaveblitz++ 被作者重新许可为与本网站许可证兼容。 wx_spec.py 被移除了。

已知问题

以下是Scipy 0.7.0的已知问题:

  • 在窗口上编织测试失败:这些都是已知的,并且正在修改。

  • 用GCC 4.3(std::labs)编织测试失败:这是一个GCC 4.3错误。解决方法是在scipy/weave/blitz/blitz/funcs.h中添加#include<cstdlib>(第27行)。您可以在已安装的Scipy中(在site包中)进行更改。