SciPy 0.8.0 发布说明#

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

请注意,由于我们正致力于发布 SciPy 1.0.0,SciPy 仍被视为处于“Beta”测试阶段。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.chirp 的关键字参数 qshape 已弃用。请改用参数 vertex_zero

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

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

新功能#

DCT 支持 (scipy.fftpack)#

添加了新的实数变换,即用于离散余弦变换的 dct 和 idct;类型 I、II 和 III 均可用。

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

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

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

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

如果传入 old_behavior=False 参数,输出现在应与 MATLAB 和 R 中的对应功能一致,并实现大多数人预期的行为

  • correlate、convolve 及其 2D 对应函数不再根据其相对形状交换输入;

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

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 方法:“hyperbolic”。

  • 现在 chirp 不再使用关键字 qshape,而是使用布尔型关键字 vertex_zero

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

新增了函数 sweep_poly

scipy.linalg 中的新函数及其他变更#

函数 cho_solve_bandedcirculantcompanionhadamardleslie 已添加到 scipy.linalg 中。

函数 block_diag 已得到增强,除常规的 2D 参数外,现在还接受标量和 1D 参数。

scipy.optimize 中的新函数及变更#

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

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

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

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

基于 ARPACK 的稀疏 SVD#

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

替代行为可用于 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 文件写入器存在一个不一致之处,它将 NumPy 1D 数组在 MATLAB 5 文件中写入为列向量,在 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 等)的文件读写器。

SciPy 0.8.0 版本中移除了 scipy.io 中的多个函数,包括:npfilesaveloadcreate_modulecreate_shelfobjloadobjsavefopenread_arraywrite_arrayfreadfwritebswappackbitsunpackbitsconvert_objectarray。其中一些函数已被 NumPy 的原始读写功能、内存映射功能或数组方法取代。其他一些已从 SciPy 移至 NumPy,因为基本的数组读写功能现在由 NumPy 处理。