SciPy 0.9.0 发布说明#
SciPy 0.9.0 是 6 个月辛勤工作的结晶。它包含了许多新功能、大量的错误修复、改进的测试覆盖率和更好的文档。此版本中有一些弃用和 API 更改,这些都在下文进行了说明。鼓励所有用户升级到此版本,因为它包含大量的错误修复和优化。此外,我们的开发重点现在将转移到 0.9.x 分支的错误修复版本以及开发主干上的新功能添加。
此版本需要 Python 2.4 - 2.7 或 3.1 - 以及 NumPy 1.5 或更高版本。
请注意,由于我们正致力于 SciPy 1.0.0 版本的发布,SciPy 仍被视为处于“Beta”状态。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
函数,除了 2D 和 1D 中的三次样条 (C1-平滑) 插值外,还可以对 N 维散点数据执行线性插值和最近邻插值。每种插值器类型也提供了面向对象的接口。
非线性方程求解器 (scipy.optimize
)#
SciPy 在 scipy.optimize
中包含了用于大规模非线性方程求解的新例程。实现了以下方法:
牛顿-克雷洛夫法 (
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_atten
和 scipy.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
)
已移除的功能#
已弃用的模块 helpmod
、pexec
和 ppimport
已从 scipy.misc
中移除。
许多 scipy.ndimage
插值函数中的 output_type
关键字已被移除。
scipy.linalg.qr
中的 econ
关键字已被移除。通过指定 mode='economic'
仍然可以使用相同的功能。
旧的关联/卷积行为 (在 scipy.signal
中)#
scipy.signal.convolve
、scipy.signal.convolve2d
、scipy.signal.correlate
和 scipy.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_moments 和 erfc。这些更改也反映在 scipy.stats.mstats
中。
scipy.sparse
#
scipy.sparse
中稀疏矩阵类的几个自 0.7 版本以来已弃用的方法已被移除:save, rowcol, getdata, listprint, ensure_sorted_indices, matvec, matmat 和 rmatvec。
函数 spkron
, speye
, spidentity
, lil_eye
和 lil_diags
已从 scipy.sparse
中移除。前三个函数仍然可以通过 scipy.sparse.kron
, scipy.sparse.eye
和 scipy.sparse.identity
访问。
dims 和 nzmax 关键字已从稀疏矩阵构造函数中移除。colind 和 rowind 属性已分别从 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