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 最小化现在只会设置默认值。在某些情况下,如果函数收敛速度较慢并且仅设置了 1 个限制,则最小化可能会比以前的版本持续更长时间,因此更有可能达到收敛。请参阅问题 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 已加快速度。改进因函数和输入大小而异。在许多情况下,可以预期速度提高 2 到 10 倍。
新类 scipy.spatial.SphericalVoronoi
在球面上构造 Voronoi 图。有关详细信息,请参阅拉取请求 gh-5232。
scipy.cluster
改进#
为 scipy.cluster.hierarchy.linkage
实现了一种新的聚类算法,即最近邻链算法。因此,对于几种链接方法,可以预期算法性能的显着提高(\(O(N^2)\) 而不是 \(O(N^3)\))。
scipy.special
改进#
新的函数 scipy.special.loggamma
计算伽马函数对数的主分支。 对于实数输入,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
名称 - (访问/设置会引发警告) - (设置会引发警告) * StateSpace - (num, den, gain) - (zeros, poles) * TransferFunction (A, B, C, D, gain) - (zeros, poles) * ZerosPolesGain (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.interpolation.affine_transform
中的偏移现在始终在应用矩阵之后添加,而与使用一维还是二维数组指定矩阵无关。
scipy.stats
#
如果输入不是实数或包含 NaN,stats.ks_2samp
过去会返回无意义的值。现在,它会针对此类输入引发异常。
已删除 scipy.stats
分布的几个已弃用的方法:est_loc_scale
、vecfunc
、veccdf
和 vec_generic_moment
。
已从 scipy.stats
中删除已弃用的函数 nanmean
、nanstd
和 nanmedian
。 这些函数在 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
#
现在,如果同时给出了 _FillValue
属性和 missing_value
属性,scipy.io.netcdf
掩码会优先使用 _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 版本。