SciPy 0.9.0 发行说明#

SciPy 0.9.0 是 6 个月辛勤工作的结晶。它包含许多新功能、大量的错误修复、改进的测试覆盖率和更好的文档。此版本中存在许多弃用和 API 更改,如下所述。鼓励所有用户升级到此版本,因为其中有大量的错误修复和优化。此外,我们的开发注意力现在将转移到 0.9.x 分支上的错误修复版本,以及在开发主干上添加新功能。

此版本需要 Python 2.4 - 2.7 或 3.1 - 以及 NumPy 1.5 或更高版本。

请注意,SciPy 仍被认为具有“Beta”状态,因为我们正在努力实现 SciPy 1.0.0 版本。 1.0.0 版本将标志着 SciPy 开发中的一个重要里程碑,之后更改包结构或 API 将会更加困难。虽然这些 1.0 之前的版本被认为具有“Beta”状态,但我们致力于使它们尽可能没有错误。

但是,在 1.0 版本发布之前,我们正在积极审查和改进功能、组织和接口。这样做是为了使软件包尽可能连贯、直观和有用。为了实现这一点,我们需要用户社区的帮助。具体来说,我们需要关于项目所有方面的反馈 - 一切 - 从我们实现的算法,到关于我们函数调用签名的详细信息。

Python 3#

Scipy 0.9.0 是第一个支持 Python 3 的 SciPy 版本。唯一尚未移植的模块是 scipy.weave

Scipy 源代码位置更改#

在此版本发布后不久,Scipy 将停止使用 SVN 作为版本控制系统,并迁移到 Git。从那时起,可以在以下位置找到 Scipy 的开发源代码:

新功能#

Delaunay 三角剖分 (scipy.spatial)#

Scipy 现在包含用于计算 N 维 Delaunay 三角剖分的例程,由 Qhull 计算几何库提供支持。此类计算现在可以使用新的 scipy.spatial.Delaunay 接口。

N 维插值 (scipy.interpolate)#

对散乱数据插值的支持现在已得到显著改进。此版本包括一个 scipy.interpolate.griddata 函数,该函数可以为 N 维散乱数据执行线性插值和最近邻插值,以及 2D 和 1D 中的三次样条(C1 平滑)插值。每个插值器类型的面向对象的接口也可用。

非线性方程求解器 (scipy.optimize)#

Scipy 在 scipy.optimize 中包含用于大规模非线性方程求解的新例程。实现了以下方法

  • Newton-Krylov (scipy.optimize.newton_krylov)

  • (广义)正割方法

    • 有限内存 Broyden 方法 (scipy.optimize.broyden1, scipy.optimize.broyden2)

    • Anderson 方法 (scipy.optimize.anderson)

  • 简单迭代 (scipy.optimize.diagbroyden, scipy.optimize.excitingmixing, scipy.optimize.linearmixing)

scipy.optimize.nonlin 模块已完全重写,并且一些函数已弃用(见上文)。

新的线性代数例程 (scipy.linalg)#

Scipy 现在包含用于有效求解三角方程组的例程 (scipy.linalg.solve_triangular)。

改进的 FIR 滤波器设计函数 (scipy.signal)#

增强了 scipy.signal.firwin 函数,以允许设计高通、带通、带阻和多频带 FIR 滤波器。

添加了 scipy.signal.firwin2 函数。此函数使用窗口方法创建一个具有任意频率响应的线性相位 FIR 滤波器。

添加了 scipy.signal.kaiser_attenscipy.signal.kaiser_beta 函数。

改进的统计测试 (scipy.stats)#

添加了一个新函数 scipy.stats.fisher_exact,它为 2x2 列联表提供了 Fisher 的精确检验。

重写了 scipy.stats.kendalltau 函数,使其速度更快(O(n log(n)) vs O(n^2))。

已弃用的功能#

过时的非线性求解器 (在 scipy.optimize 中)#

来自 scipy.optimize 的以下非线性求解器已弃用

  • broyden_modified (性能不佳)

  • broyden1_modified (性能不佳)

  • broyden_generalized (等效于 anderson)

  • anderson2 (等效于 anderson)

  • broyden3 (被新的有限内存 broyden 方法取代)

  • vackar (已重命名为 diagbroyden)

已移除的功能#

已从 scipy.misc 中移除已弃用的模块 helpmodpexecppimport

已移除许多 scipy.ndimage 插值函数中的 output_type 关键字。

已移除 scipy.linalg.qr 中的 econ 关键字。通过指定 mode='economic' 仍然可以使用相同的功能。

旧的互相关/卷积行为(在 scipy.signal 中)#

scipy.signal.convolvescipy.signal.convolve2dscipy.signal.correlatescipy.signal.correlate2d 的旧行为已在 0.8.0 版本中弃用,现已移除。如果第二个参数的维度大于第一个参数,卷积和互相关过去会交换它们的参数,并且模式是相对于具有最大维度的输入而言的。当前的行为是永远不交换输入,这符合大多数人的期望,并且也是相关性通常的定义方式。

scipy.stats#

scipy.stats 中许多可以从 numpy 中获得或已被取代的函数,并且自 0.7 版本以来已被弃用,现已移除:stdvarmeanmediancovcorrcoefzzsstderrsamplestdsamplevarpdfapproxpdf_momentserfc。这些更改在 scipy.stats.mstats 中也有体现。

scipy.sparse#

已移除 scipy.sparse 中稀疏矩阵类的几个自 0.7 版本以来已弃用的方法:saverowcolgetdatalistprintensure_sorted_indicesmatvecmatmatrmatvec

已从 scipy.sparse 中移除函数 spkronspeyespidentitylil_eyelil_diags。前三个函数仍然可以通过 scipy.sparse.kronscipy.sparse.eyescipy.sparse.identity 使用。

已从稀疏矩阵构造函数中移除 dimsnzmax 关键字。已分别从 CSR 和 CSC 矩阵中移除 colindrowind 属性。

scipy.sparse.linalg.arpack.speigs#

已移除 ARPACK 库的重复接口。

其他更改#

ARPACK 接口更改#

为提高鲁棒性,更改了 scipy.sparse.linalg 中 ARPACK 特征值例程的接口。

如果特征值迭代未能收敛,特征值和 SVD 例程现在会引发 ArpackNoConvergence。如果需要部分收敛的结果,可以通过以下方式访问:

import numpy as np
from scipy.sparse.linalg import eigs, ArpackNoConvergence

m = np.random.randn(30, 30)
try:
    w, v = eigs(m, 6)
except ArpackNoConvergence, err:
    partially_converged_w = err.eigenvalues
    partially_converged_v = err.eigenvectors

还修复了一些错误。

此外,这些例程被重命名如下:

  • eigen –> eigs

  • eigen_symmetric –> eigsh

  • svd –> svds