SciPy 0.18.0 发布说明#
SciPy 0.18.0 是6个月辛勤工作的结晶。它包含了许多新功能、大量的错误修复、改进的测试覆盖率和更好的文档。在此版本中,有一些弃用和API变化,下面将详细说明。鼓励所有用户升级到此版本,因为有许多错误修复和优化。此外,我们的开发重点将转向0.19.x分支的错误修复版本,并在主分支上添加新功能。
此版本需要 Python 2.7 或 3.4-3.5 以及 NumPy 1.7.1 或更高版本。
此版本的重点包括:
一个新的用于两点边值问题的ODE求解器,scipy.optimize.solve_bvp。
一个新的类,CubicSpline,用于数据的立方样条插值。
N 维张量积多项式,
scipy.interpolate.NdPPoly
。球面Voronoi图,
scipy.spatial.SphericalVoronoi
.离散时间线性系统的支持,
scipy.signal.dlti
。
新功能#
scipy.integrate
改进#
在 scipy.integrate.solve_bvp
中实现了一个用于ODE系统的两点边值问题求解器。该求解器允许非分离边界条件、未知参数和某些奇异项。它使用四阶配点算法找到一个C1连续的解。
scipy.interpolate
改进#
三次样条插值现在可以通过 scipy.interpolate.CubicSpline
实现。该类表示通过给定点的分段三次多项式,并且是C2连续的。它在每个区段的标准多项式基中表示。
n 维张量积分段多项式的表示可通过 scipy.interpolate.NdPPoly
类获得。
单变量分段多项式类 PPoly 和 Bpoly 现在可以在周期域上进行评估。为此,请使用 extrapolate=”periodic” 关键字参数。
scipy.fftpack
改进#
scipy.fftpack.next_fast_len
函数计算 FFTPACK 的下一个“规则”数字。将输入填充到这个长度可以显著提高 scipy.fftpack.fft
的性能。
scipy.signal
改进#
使用多相滤波的重采样已在函数 scipy.signal.resample_poly
中实现。该方法对信号进行上采样,应用零相位低通FIR滤波器,并使用 scipy.signal.upfirdn`(这也是0.18.0中的新功能)进行下采样。对于某些信号,该方法可能比 `scipy.signal.resample 提供的基于FFT的滤波更快。
scipy.signal.firls
,它使用最小二乘误差最小化构建FIR滤波器,已被添加。
scipy.signal.sosfiltfilt
被添加,它像 scipy.signal.filtfilt
一样进行前后滤波,但适用于二阶分段。
离散时间线性系统#
scipy.signal.dlti
提供了离散时间线性系统的实现。因此,StateSpace、TransferFunction 和 ZerosPolesGain 类学习了一个新的关键字 dt,该关键字可用于创建相应系统表示的离散时间实例。
scipy.sparse
改进#
在 scipy.sparse
中的函数 sum, max, mean, min, transpose, 和 reshape 的签名已经通过增加额外的参数和功能进行了扩展,以提高与 numpy
中类似定义的函数的兼容性。
稀疏矩阵现在有一个 count_nonzero 方法,用于计算矩阵中非零元素的数量。与返回存储条目数量(数据属性的长度)的 getnnz() 和 nnz
属性不同,此方法计算数据中实际非零条目的数量。
scipy.optimize
改进#
Nelder-Mead 最小化的实现,scipy.minimize(…, method=”Nelder-Mead”),获得了一个新的关键字 initial_simplex,它可以用于指定优化过程的初始单纯形。
在CG和BFGS最小化器中初始步长选择的改进已经完成。我们预计这一变化将在某些情况下提高优化的数值稳定性。详情请参见拉取请求gh-5536。
在 SLSQP 优化中处理无限边界的问题已得到改进。我们预计这一变化将在某些情况下提高优化的数值稳定性。详情请参见拉取请求 gh-6024。
scipy/benchmarks/go_benchmark_functions
中添加了一套大型的全局优化基准测试。详情请参见拉取请求 gh-4191。
Nelder-Mead 和 Powell 最小化现在只有在调用者没有设置最大迭代次数或函数评估次数的情况下才会设置默认值。在某些情况下,如果函数收敛缓慢且只设置了一个限制,最小化可能会比以前的版本持续更长时间,因此更有可能达到收敛。参见问题 gh-5966。
scipy.stats
改进#
梯形分布已实现为 scipy.stats.trapz
。偏态正态分布已实现为 scipy.stats.skewnorm
。Burr XII型分布已实现为 scipy.stats.burr12
。三参数和四参数kappa分布分别已实现为 scipy.stats.kappa3
和 scipy.stats.kappa4
。
新的 scipy.stats.iqr
函数计算分布的四分位距。
随机矩阵#
scipy.stats.special_ortho_group
和 scipy.stats.ortho_group
分别提供 SO(N) 和 O(N) 群中随机矩阵的生成器。它们生成符合 Haar 分布的矩阵,这是这些群流形上唯一的均匀分布。
scipy.stats.random_correlation
提供了一个生成随机相关矩阵的生成器,给定指定的特征值。
scipy.linalg
改进#
scipy.linalg.svd
新增了一个关键字参数 lapack_driver
。可用的驱动程序有 gesdd``(默认)和 ``gesvd
。
scipy.linalg.lapack.ilaver
返回 SciPy 链接到的 LAPACK 库的版本。
scipy.spatial
改进#
布尔距离,scipy.spatial.pdist,已经得到了加速。改进程度因函数和输入大小而异。在许多情况下,可以预期速度提升为 x2–x10。
新类 scipy.spatial.SphericalVoronoi
在球体表面上构建 Voronoi 图。详情请参见拉取请求 gh-5232。
scipy.cluster
改进#
一个新的聚类算法,最近邻链算法,已经为 scipy.cluster.hierarchy.linkage
实现。因此,对于几种链接方法,可以预期算法性能有显著提升(\(O(N^2)\) 而不是 \(O(N^3)\))。
scipy.special
改进#
新函数 scipy.special.loggamma
计算 Gamma 函数对数的主分支。对于实数输入,loggamma
与 scipy.special.gammaln
兼容。对于复数输入,它在复平面上表现出更一致的行为,因此应优先于 gammaln
使用。
球贝塞尔函数的矢量化形式已实现为 scipy.special.spherical_jn
、scipy.special.spherical_kn
、scipy.special.spherical_in
和 scipy.special.spherical_yn
。建议使用这些函数,而不是现已弃用的 sph_*
函数。
已经将几个特殊函数扩展到复数域和/或看到了域/稳定性改进。这包括 spence、digamma、log1p 和几个其他函数。
已弃用的功能#
lti 系统的跨类属性已被弃用。以下属性/设置器将引发 DeprecationWarning:
名称 - (访问/设置引发警告) - (设置引发警告) * 状态空间 - (num, den, gain) - (zeros, poles) * 传递函数 (A, B, C, D, gain) - (zeros, poles) * 零极点增益 (A, B, C, D, num, den) - ()
球贝塞尔函数 sph_in
, sph_jn
, sph_kn
, sph_yn
, sph_jnyn
和 sph_inkn
已被弃用,取而代之的是 scipy.special.spherical_jn
和 spherical_kn
, spherical_yn
, spherical_in
。
scipy.constants
中的以下函数已被弃用:C2K
、K2C
、C2F
、F2C
、F2K
和 K2F
。它们已被新函数 scipy.constants.convert_temperature
取代,该函数可以执行所有这些转换,以及与兰金温标之间的转换。
向后不兼容的更改#
scipy.optimize
#
optimize.bisect
、optimize.brentq
、optimize.brenth
和 optimize.ridder
的收敛标准现在与 numpy.allclose
的工作方式相同。
scipy.ndimage
#
在 ndimage.iterpolation.affine_transform
中的偏移量现在始终在矩阵应用之后添加,无论矩阵是使用一维数组还是二维数组指定的。
scipy.stats
#
stats.ks_2samp
如果输入不是实数或包含 nans,过去会返回无意义的值。现在对于此类输入会引发异常。
scipy.stats
分布的几个已弃用方法已被移除:est_loc_scale
、vecfunc
、veccdf
和 vec_generic_moment
。
已弃用的函数 nanmean
、nanstd
和 nanmedian
已从 scipy.stats
中移除。这些函数在 scipy 0.15.0 中已被弃用,取而代之的是它们的 numpy
等效函数。
scipy.stats
中分布的 rvs()
方法存在一个错误已被修复。当传递给 rvs()
的参数是为了广播而形状化时,在许多情况下返回的随机样本并不是随机的。这个问题的简单示例是 stats.norm.rvs(loc=np.zeros(10))
。由于这个错误,该调用将返回10个相同的值。该错误仅影响依赖于形状、位置和尺度参数广播的代码。
rvs()
方法也接受了一些它不应该接受的参数。在 rvs()
接受实际上与广播不兼容的参数的情况下,存在潜在的向后不兼容性。例如是
stats.gamma.rvs([2, 5, 10, 15], size=(2,2))
第一个参数的形状与请求的大小不兼容,但函数仍然返回了一个形状为 (2, 2) 的数组。在 scipy 0.18 中,该调用会生成一个 ValueError
。
scipy.io
#
scipy.io.netcdf
掩码现在如果同时给出 _FillValue
和 missing_value
属性,优先考虑 _FillValue
属性。此外,数据只有在完全匹配这些属性之一时才会被视为缺失:与 _FillValue
或 missing_value
相差四舍五入的值不再被视为缺失值。
scipy.interpolate
#
scipy.interpolate.PiecewisePolynomial 类已被移除。它在 scipy 0.14.0 中已被弃用,scipy.interpolate.BPoly.from_derivatives
作为其替代品。
其他更改#
Scipy 现在使用 setuptools
进行构建,而不是简单的 distutils。这修复了依赖 Scipy 的项目在 setup.py
文件中使用 install_requires='scipy'
的问题(详见 Numpy 问题 gh-6551)。尽管如此,它可能会影响 Scipy 自身构建/安装方法的行为。请在 Scipy 问题跟踪器上报告任何意外行为。
PR #6240 改变了 scipy.optimize
模块中基于 L-BFGS-B 的例程对 maxfun 选项的解释。L-BFGS-B 搜索由多个迭代组成,每个迭代包含一个或多个函数评估。旧的搜索策略在达到 maxfun 函数评估后立即终止,而新的策略允许当前迭代在达到 maxfun 后完成。
scipy.spatial
子包中捆绑的 Qhull 副本已升级到 2015.2 版本。
scipy.sparse.linalg
子包中捆绑的 ARPACK 副本已升级到 arpack-ng 3.3.0。
scipy.sparse
子包中捆绑的 SuperLU 副本已升级到 5.1.1 版本。