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 版本之前的版本被视为“测试版”,但我们致力于尽可能使其无错误。
然而,在 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 已被弃用。它们将在 0.9 版本中从 SciPy 中移除。
其他弃用项#
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)#
输出现在应与 Matlab 和 R 的对应函数一致,并且如果在传入 old_behavior=False 参数时,执行的操作符合大多数人的预期。
correlate、convolve 及其 2D 对应函数不再根据其相对形状交换输入;
相关函数现在在计算滑动和积时会对第二个参数进行共轭处理,这符合相关函数的通用定义。
LTI 函数的添加与修改(scipy.signal)#
函数 impulse2 和 step2 被添加到
scipy.signal中。它们分别使用函数 scipy.signal.lsim2 来计算系统的脉冲响应和阶跃响应。函数 scipy.signal.lsim2 已更改,以便将任何额外的关键字参数传递给 ODE 求解器。
改进的波形发生器(scipy.signal)#
对 scipy.signal 中的 chirp 函数进行了几项改进
修正了 method=”logarithmic” 时生成的波形;它现在生成的波形也称为“指数”或“几何”啁啾(chirp)。(参见 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 得到增强,除了通常的 2D 参数外,现在还接受标量和 1D 参数。
scipy.optimize 中的新函数及更改#
添加了 curve_fit 函数;它接收一个函数,并使用非线性最小二乘法将其拟合到提供的数据中。
leastsq 和 fsolve 函数在求解单个参数时,现在返回一个大小为 1 的数组,而不是标量。
新的稀疏最小二乘求解器#
lsqr 函数被添加到 scipy.sparse 中。此例程为大型稀疏线性方程组寻找最小二乘解。
基于 ARPACK 的稀疏 SVD#
scipy.sparse.linalg._eigen.arpack 中提供了一种用于稀疏矩阵的简单 SVD 实现。它基于在 <A, A> 上使用对称求解器,因此可能不够精确。
scipy.constants.find 提供替代行为#
函数 scipy.constants.find 添加了关键字参数 disp,默认值为 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 处理。