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)) 对比 O(n^2))。

已弃用的功能#

已废弃的非线性求解器(在 scipy.optimize 中)#

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

  • broyden_modified (性能不佳)

  • broyden1_modified (性能不佳)

  • broyden_generalized (等同于 anderson)

  • anderson2 (等同于 anderson)

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

  • vackar (已重命名为 diagbroyden)

已移除的功能#

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

许多 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 以来已被弃用,现已被移除:std, var, mean, median, cov, corrcoef, z, zs, stderr, samplestd, samplevar, pdfapprox, pdf_momentserfc。这些变化在 scipy.stats.mstats 中也有所反映。

scipy.sparse#

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

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

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

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