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
改进#
ODE 系统的两点边值问题的求解器已在 scipy.integrate.solve_bvp
中实现。该求解器允许非分离边界条件、未知参数和某些奇异项。 它使用四阶配置算法找到 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 的滤波更快。
添加了使用最小二乘误差最小化构造 FIR 滤波器的 scipy.signal.firls
。
添加了 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 type 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 图。有关详细信息,请参阅 pull request 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
。
球 Bessel 函数的向量化形式已实现为 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) - ()
球 Bessel 函数,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
取代,该函数可以执行所有这些转换,加上与/从 Rankine 温标的转换。
向后不兼容的更改#
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
。
已弃用的函数 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
或 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 issue gh-6551)。尽管如此,它可能会影响 Scipy 本身的构建/安装方法的行为方式。请在 Scipy issue tracker 上报告任何意外行为。
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 版本。