SciPy 0.11.0 发行说明#
SciPy 0.11.0 是 8 个月辛勤工作的成果。它包含许多新特性、大量错误修复、改进的测试覆盖率和更好的文档。此版本的亮点是
添加了一个新模块,提供了许多常见的稀疏图算法。
添加了到现有优化和根查找函数的新的统一接口。
鼓励所有用户升级到此版本,因为它包含大量错误修复和优化。我们的开发注意力现在将转移到 0.11.x 分支上的错误修复版本,以及在主分支上添加新特性。
此版本需要 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
改进#
此版本对 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
的改进#
新的矩阵方程求解器#
用于求解 Sylvester 方程 (scipy.linalg.solve_sylvester
)、离散和连续 Lyapunov 方程 (scipy.linalg.solve_lyapunov
、scipy.linalg.solve_discrete_lyapunov
) 以及离散和连续代数 Riccati 方程 (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
函数。
scipy.stats.distributions
中所有分布的 xa 和 xb 参数已经没有被使用;它们现在已被弃用。
向后不兼容的更改#
删除 scipy.maxentropy
#
已删除在 0.10.0 版本中已弃用的 scipy.maxentropy
模块。scikits.learn 中的 Logistic 回归是此功能的良好且现代的替代方案。
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
关键字参数。