SciPy 0.8.0 发行说明#

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

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

然而,在 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 中的 helpmod、ppimport 和 pexec 模块已废弃。它们将在 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)#

  • 函数 impulse2 和 step2 已添加到 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 现在使用关键字 vertex_zero(一个布尔值),而不是关键字 qshape。

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

添加了一个新函数 sweep_poly。

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

函数 cho_solve_banded、circulant、companion、hadamard 和 leslie 已添加到 scipy.linalg

block_diag 函数已增强,以接受标量和 1D 参数,以及通常的 2D 参数。

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

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

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

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

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

基于 ARPACK 的稀疏 SVD#

稀疏矩阵的 SVD 的朴素实现可在 scipy.sparse.linalg._eigen.arpack 中获得。它基于对 使用对称求解器,因此可能不是很精确。

scipy.constants.find 的替代行为#

关键字参数 disp 已添加到函数 scipy.constants.find,默认值为 True。当 disp 为 True 时,行为与 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.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 处理。