SciPy 0.11.0 发行说明#
SciPy 0.11.0 是 8 个月辛勤工作的成果。它包含许多新特性、大量错误修复、改进的测试覆盖率和更好的文档。本次发行的亮点包括
已添加一个新模块,它提供了许多常用的稀疏图算法。
已为现有的优化和求根函数添加了新的统一接口。
建议所有用户升级到此版本,因为它包含大量的错误修复和优化。我们的开发重心现在将转移到 0.11.x 分支上的错误修复版本,以及在 master 分支上添加新功能。
此版本需要 Python 2.4-2.7 或 3.1-3.2 以及 NumPy 1.5.1 或更高版本。
新特性#
稀疏图子模块#
新的子模块 scipy.sparse.csgraph
实现了许多高效的图算法,适用于存储为稀疏邻接矩阵的图。可用例程包括
connected_components
- 确定图的连通分量
laplacian
- 计算图的拉普拉斯矩阵
shortest_path
- 计算正图上点之间的最短路径
dijkstra
- 使用 Dijkstra 算法计算最短路径
floyd_warshall
- 使用 Floyd-Warshall 算法计算最短路径
breadth_first_order
- 计算节点的广度优先顺序
depth_first_order
- 计算节点的深度优先顺序
breadth_first_tree
- 从给定节点构建广度优先树
depth_first_tree
- 从给定节点构建深度优先树
minimum_spanning_tree
- 构建图的最小生成树
scipy.optimize
改进#
优化模块在此版本中受到了大量关注。除了增加测试、改进文档、修复错误和清理代码外,还进行了以下改进
已添加单变量和多变量函数最小化器的统一接口。
已添加多变量函数求根算法的统一接口。
L-BFGS-B 算法已更新到 3.0 版本。
最小化器统一接口#
新增了两个函数 scipy.optimize.minimize
和 scipy.optimize.minimize_scalar
,分别为多变量和单变量函数的最小化器提供通用接口。对于多变量函数,scipy.optimize.minimize
为无约束优化方法(fmin
、fmin_powell
、fmin_cg
、fmin_ncg
、fmin_bfgs
和 anneal)或约束优化方法(fmin_l_bfgs_b
、fmin_tnc
、fmin_cobyla
和 fmin_slsqp
)提供接口。对于单变量函数,scipy.optimize.minimize_scalar
为无约束和有界优化方法(brent
、golden
、fminbound
)提供接口。这使得求解器之间的比较和切换更加容易。
求根算法统一接口#
新函数 scipy.optimize.root
为多变量函数求根算法提供了一个通用接口,其中包含了 fsolve
、leastsq
和 nonlin
求解器。
scipy.linalg
改进#
新矩阵方程求解器#
西尔维斯特方程(scipy.linalg.solve_sylvester
)、离散和连续李雅普诺夫方程(scipy.linalg.solve_lyapunov
、scipy.linalg.solve_discrete_lyapunov
)以及离散和连续代数里卡蒂方程(scipy.linalg.solve_continuous_are
、scipy.linalg.solve_discrete_are
)的求解器已添加到 scipy.linalg
中。这些求解器常用于线性控制理论领域。
QZ 和 QR 分解#
现在可以使用 scipy.linalg.qz
计算 QZ 或广义 Schur 分解。此函数封装了 LAPACK 例程 sgges、dgges、cgges 和 zgges。
已添加函数 scipy.linalg.qr_multiply
,它允许高效计算 Q (来自 QR 分解) 和向量的矩阵乘积。
帕斯卡矩阵#
已添加一个用于创建帕斯卡矩阵的函数,即 scipy.linalg.pascal
。
稀疏矩阵构建与操作#
新增了两个函数 scipy.sparse.diags
和 scipy.sparse.block_diag
,分别用于轻松构建对角和分块对角稀疏矩阵。
scipy.sparse.csc_matrix
和 csr_matrix
现在支持以下操作:sin
、tan
、arcsin
、arctan
、sinh
、tanh
、arcsinh
、arctanh
、rint
、sign
、expm1
、log1p
、deg2rad
、rad2deg
、floor
、ceil
和 trunc
。此前,这些操作必须通过操作矩阵的 data
属性来执行。
LSMR 迭代求解器#
LSMR,一种用于求解(稀疏)线性和线性最小二乘系统的迭代方法,已作为 scipy.sparse.linalg.lsmr
添加。
离散正弦变换#
离散正弦变换函数的绑定已添加到 scipy.fftpack
。
scipy.interpolate
改进#
为了在球坐标系中进行插值,已添加了三个类:scipy.interpolate.SmoothSphereBivariateSpline
、scipy.interpolate.LSQSphereBivariateSpline
和 scipy.interpolate.RectSphereBivariateSpline
。
分箱统计 (scipy.stats
)#
stats 模块新增了执行分箱统计的函数,这些函数是直方图在 1 维、2 维和多维上的推广:scipy.stats.binned_statistic
、scipy.stats.binned_statistic_2d
和 scipy.stats.binned_statistic_dd
。
已废弃特性#
scipy.sparse.cs_graph_components
已成为稀疏图子模块的一部分,并重命名为 scipy.sparse.csgraph.connected_components
。调用旧例程将导致废弃警告。
scipy.misc.radon
已废弃。功能更完善的 radon 变换可以在 scikits-image 中找到。
scipy.io.save_as_module
已废弃。保存多个 Numpy 数组的更好方法是使用 numpy.savez
函数。
xa 和 xb 参数对于 scipy.stats.distributions
中的所有分布来说已经不再使用;现已废弃。
向后不兼容的变更#
移除 scipy.maxentropy
#
scipy.maxentropy
模块已在 0.10.0 版本中废弃并已移除。scikits.learn 中的逻辑回归是此功能的一个良好且现代的替代方案。
splev
行为的微小变化#
样条求值函数现在对大小为 1 的数组的行为与 interp1d
类似。旧行为
>>> from scipy.interpolate import splev, splrep, interp1d
>>> x = [1,2,3,4,5]
>>> y = [4,5,6,7,8]
>>> tck = splrep(x, y)
>>> splev([1], tck)
4.
>>> splev(1, tck)
4.
修正后的行为
>>> splev([1], tck)
array([ 4.])
>>> splev(1, tck)
array(4.)
这也会影响 UnivariateSpline
类。
scipy.integrate.complex_ode
的行为#
complex_ode
的 y
属性的行为已更改。此前,它以以下形式表示复数值解
z = ode.y[::2] + 1j * ode.y[1::2]
现在,它直接是复数值解
z = ode.y
T 检验行为的微小变化#
T 检验 scipy.stats.ttest_ind
、scipy.stats.ttest_rel
和 scipy.stats.ttest_1samp
已更改,因此 0 / 0 现在返回 NaN 而不是 1。
其他变更#
scipy.sparse.linalg
中的 SuperLU 源代码已从上游更新到 4.3 版本。
函数 scipy.signal.bode
(用于计算连续时间系统的幅度和相位数据)已添加。
两样本 T 检验 scipy.stats.ttest_ind
新增了一个选项,用于比较方差不等的样本,即 Welch T 检验。
scipy.misc.logsumexp
现在接受可选的 axis
关键字参数。