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
,该函数允许高效计算 QR 分解中 Q 矩阵与向量的乘积。
Pascal 矩阵#
添加了一个用于创建Pascal矩阵的函数 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-D、2-D 和多维空间中: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
已被弃用。在 scikits-image 中可以找到功能更全面的拉东变换。
scipy.io.save_as_module
已被弃用。保存多个 Numpy 数组的更好方法是使用 numpy.savez
函数。
在 scipy.stats.distributions
中的所有分布的 xa 和 xb 参数已经不再使用;它们现在已被弃用。
向后不兼容的更改#
移除 scipy.maxentropy
#
在 0.10.0 版本中被弃用的 scipy.maxentropy
模块已被移除。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’s T检验。
scipy.misc.logsumexp
现在接受一个可选的 axis
关键字参数。