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 中添加了 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)的求解器。这些求解器常用于线性控制理论领域。
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 模块增加了分箱统计函数,它是直方图的推广,可用于 1D、2D 和多维度: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 中的逻辑回归是此功能的一个良好且现代的替代方案。
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 关键字参数。