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)#

模块 helpmodppimportpexec 来自 scipy.misc 已弃用。它们将从 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)#

如果传递 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 使用关键字 vertex_zero(一个布尔值)而不是关键字 qshape

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

添加了一个新函数 sweep_poly

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

将函数 cho_solve_bandedcirculantcompanionhadamardleslie 添加到 scipy.linalg

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

scipy.optimize 中的新功能和更改#

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

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

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

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

基于 ARPACK 的稀疏 SVD#

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

scipy.constants.find 的可用替代行为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 一维数组在 Matlab 5 文件中写为列向量,在 Matlab 4 文件中写为行向量。 我们将在下一个版本中更改此行为,使其都写入行向量。 在调用写入器时会显示 FutureWarning 以警告此更改;目前我们建议使用 scipy.io.savemat 和朋友的 oned_as='row' 关键字参数。

更快地计算正交多项式#

可以使用 scipy.special 中的新向量化函数计算正交多项式的值:eval_legendreeval_chebyteval_chebyueval_chebyceval_chebyseval_jacobieval_laguerreeval_genlaguerreeval_hermiteeval_hermitenormeval_gegenbauereval_sh_legendreeval_sh_chebyteval_sh_chebyueval_sh_jacobi。 这比构造多项式的完整系数表示更快,而之前只有这种方法可用。

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

Lambert W 函数#

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

改进的超几何 2F1 函数#

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

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

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

删除的功能#

scipy.stsci:该软件包已删除

删除了模块 scipy.misc.limits

scipy.io#

NumPy 和 SciPy 中的 IO 代码正在进行大规模的重构。 NumPy 将是用于读取和写入 NumPy 数组的基本代码的所在位置,而 SciPy 将容纳各种数据格式(数据、音频、视频、图像、Matlab 等)的文件读取器和写入器。

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