SciPy 0.8.0 发行说明#

SciPy 0.8.0 是 17 个月辛勤工作的结晶。它包含了许多新功能、大量的错误修复、改进的测试覆盖率和更好的文档。在此版本中,有一些弃用和 API 变更,如下文所述。鼓励所有用户升级到此版本,因为有许多错误修复和优化。此外,我们的开发重点将转向 0.8.x 分支上的错误修复版本,并在开发主干上添加新功能。此版本需要 Python 2.4 - 2.6 和 NumPy 1.4.1 或更高版本。

请注意,SciPy 仍被视为处于“Beta”状态,因为我们正朝着 SciPy 1.0.0 版本的发布努力。1.0.0 版本的发布将标志着 SciPy 开发过程中的一个重要里程碑,在此之后,更改包结构或 API 将变得更加困难。尽管这些 1.0 版本之前的发布被视为“Beta”状态,但我们致力于使它们尽可能无错误。

然而,在1.0版本发布之前,我们正在积极审查和完善功能、组织结构和接口。这是为了使软件包尽可能地连贯、直观和有用。为了实现这一点,我们需要来自用户社区的帮助。具体来说,我们需要关于项目各个方面的反馈——从我们实现的算法,到我们函数调用签名的细节。

Python 3#

Python 3 兼容性正在计划中,并且目前在技术上是可行的,因为 Numpy 已经移植。然而,由于 Python 3 兼容的 Numpy 1.5 尚未发布,Scipy 0.8 中尚未包含对 Python 3 的支持。预计于 2010 年秋季发布的 SciPy 0.9 很可能会包含对 Python 3 的实验性支持。

主要文档改进#

SciPy 文档有了显著改进。

已弃用的功能#

交换相关函数的输入(scipy.signal)#

关注 correlate, correlate2d, convolve 和 convolve2d。如果第二个输入大于第一个输入,则在调用底层计算例程之前交换输入。此行为已被弃用,并将在 scipy 0.9.0 中移除。

已弃用的代码(scipy.misc)#

来自 scipy.misc 的模块 helpmodppimportpexec 已被弃用。它们将在 SciPy 0.9 版本中被移除。

额外的弃用#

  • linalg: 函数 solveh_banded 目前返回一个包含 Cholesky 分解和线性系统解的元组。在 SciPy 0.9 中,返回值将仅为解。

  • 函数 constants.codata.find 将生成一个 DeprecationWarning。在 Scipy 版本 0.8.0 中,向该函数添加了关键字参数 ‘disp’,默认值为 ‘True’。在 0.9.0 中,默认值将变为 ‘False’。

  • signal.chirpqshape 关键字参数已被弃用。请改用 vertex_zero 参数。

  • 将多项式的系数作为参数 f0 传递给 signal.chirp 已被弃用。请改用函数 signal.sweep_poly

  • io.recaster 模块已被弃用,并将在 0.9.0 版本中移除。

新功能#

DCT 支持 (scipy.fftpack)#

新增了新的 realtransforms,即用于离散余弦变换的 dct 和 idct;类型 I、II 和 III 可用。

fft 函数的单精度支持 (scipy.fftpack)#

fft 函数现在也可以处理单精度输入:如果 x 是单精度的,fft(x) 将返回一个单精度数组。

目前,对于不是2、3和5的合数的FFT大小,变换在内部以双精度计算,以避免FFTPACK中的舍入误差。

相关函数现在实现了通常的定义(scipy.signal)#

现在,输出应与其对应的 MATLAB 和 R 版本一致,并且在传递 old_behavior=False 参数时,应符合大多数人的预期:

  • correlate、convolve 及其二维对应物不再根据其相对形状交换其输入;

  • 相关函数现在在计算滑动和积时共轭其第二个参数,这与相关性的通常定义相对应。

对LTI函数(scipy.signal)的添加和修改#

  • 函数 impulse2step2 被添加到 scipy.signal 中。它们分别使用函数 scipy.signal.lsim2 来计算系统的脉冲响应和阶跃响应。

  • 函数 scipy.signal.lsim2 被修改为将任何额外的关键字参数传递给 ODE 求解器。

改进的波形生成器 (scipy.signal)#

scipy.signal 中的 chirp 函数进行了几项改进:

  • method=”logarithmic” 时生成的波形已修正;现在它生成的波形也被称为“指数”或“几何”啁啾。(参见 https://en.wikipedia.org/wiki/Chirp。)

  • 新增了一个 chirp 方法,名为“双曲线”。

  • 现在,chirp 使用关键字 vertex_zero 代替了关键字 qshape,这是一个布尔值。

  • chirp 不再处理任意多项式。此功能已被移至新函数 sweep_poly

新增了一个函数 sweep_poly

scipy.linalg 中的新功能和其他更改#

函数 cho_solve_banded, circulant, companion, hadamardleslie 已添加到 scipy.linalg 中。

函数 block_diag 被增强以接受标量和一维参数,以及通常的二维参数。

scipy.optimize 中的新功能和变化#

curve_fit 函数已添加;它接受一个函数,并使用非线性最小二乘法将其拟合到提供的数据上。

leastsqfsolve 函数现在在求解单个参数时返回一个大小为一的数组,而不是标量。

新的稀疏最小二乘求解器#

lsqr 函数已添加到 scipy.sparse 中。此例程 找到一个大型、稀疏线性方程组的最小二乘解。

基于ARPACK的稀疏SVD#

在 scipy.sparse.linalg._eigen.arpack 中提供了一个稀疏矩阵的 SVD 的简单实现。它基于对 <A, A> 使用对称求解器,因此可能不是很精确。

scipy.constants.find 的可选行为#

关键字参数 disp 被添加到函数 scipy.constants.find 中,默认值为 True。当 dispTrue 时,其行为与 Scipy 0.7 版本相同。当 False 时,函数返回键的列表而不是打印它们。(在 SciPy 0.9 版本中,默认值将被反转。)

不完整的稀疏LU分解#

Scipy 现在封装了 SuperLU 版本 4.0,该版本支持不完全稀疏 LU 分解。这些可以通过 scipy.sparse.linalg.spilu 访问。升级到 SuperLU 4.0 还修复了一些已知的错误。

更快的Matlab文件读取器和默认行为更改#

我们已经用 Cython 重写了 matlab 文件读取器,现在它应该能够以与 Matlab 相同的速度读取 matlab 文件。

该阅读器可以读取命名的和匿名的 MATLAB 函数,但不能写入它们。

在 scipy 0.8.0 之前,我们将 MATLAB 结构数组作为 numpy 对象数组返回,其中对象具有以结构字段命名的属性。从 0.8.0 开始,我们将 MATLAB 结构作为 numpy 结构化数组返回。您可以通过使用 scipy.io.loadmat 及其朋友的可选 struct_as_record=False 关键字参数来获得旧的行为。

在matlab文件写入器中存在不一致性,即它在matlab 5文件中将numpy一维数组写为列向量,而在matlab 4文件中写为行向量。我们将在下一个版本中更改这一点,以便两者都写入行向量。在调用写入器时会有一个 FutureWarning 来警告这一变化;目前我们建议使用 scipy.io.savemat 及其相关函数的 oned_as='row' 关键字参数。

正交多项式的更快评估#

正交多项式的值可以通过 scipy.special 中的新矢量化函数进行计算:eval_legendre, eval_chebyt, eval_chebyu, eval_chebyc, eval_chebys, eval_jacobi, eval_laguerre, eval_genlaguerre, eval_hermite, eval_hermitenorm, eval_gegenbauer, eval_sh_legendre, eval_sh_chebyt, eval_sh_chebyu, eval_sh_jacobi。这比构建多项式的完整系数表示更快,而这是之前唯一可用的方法。

请注意,先前的正交多项式例程现在在可能的情况下也会调用此功能。

Lambert W 函数#

scipy.special.lambertw 现在可以用于计算 Lambert W 函数。

改进的超几何 2F1 函数#

对实数参数的 scipy.special.hyp2f1 实现进行了修订。新版本应为所有实数参数生成准确值。

径向基函数插值的更灵活接口#

scipy.interpolate.Rbf 类现在接受一个可调用对象作为“function”参数的输入,除了可以使用字符串参数选择的内置径向基函数外。

已移除的功能#

scipy.stsci: 该包已被移除

模块 scipy.misc.limits 已被移除。

scipy.io#

NumPy 和 SciPy 中的 IO 代码正在被大量重构。NumPy 将存放读取和写入 NumPy 数组的基本代码,而 SciPy 将包含各种数据格式(数据、音频、视频、图像、matlab 等)的文件读取器和写入器。

在 0.8.0 版本中,scipy.io 中的几个函数已被移除,包括: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 处理。