SciPy 0.18.0 发行说明#
SciPy 0.18.0 是 6 个月辛勤工作的结晶。它包含许多新功能、大量错误修复、改进的测试覆盖范围以及更好的文档。此版本中有一些弃用和 API 更改,详见下文。鼓励所有用户升级到此版本,因为其中包含大量的错误修复和优化。此外,我们的开发重心现在将转向 0.19.x 分支的错误修复发布,以及在主分支(master branch)上添加新功能。
此版本需要 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 系统的两点边值问题求解器。该求解器允许非分离边界条件、未知参数和某些奇异项。它使用四阶配制算法(collocation algorithm)寻找 C1 连续解。
scipy.interpolate 改进#
现在可以通过 scipy.interpolate.CubicSpline 进行三次样条插值。该类表示一个通过给定点且 C2 连续的分段三次多项式。它在每个分段上以标准多项式基表示。
scipy.interpolate.NdPPoly 类提供了 n 维张量积分段多项式的表示。
单变量分段多项式类 PPoly 和 Bpoly 现在可以在周期域上进行求值。为此请使用 extrapolate="periodic" 关键字参数。
scipy.fftpack 改进#
scipy.fftpack.next_fast_len 函数为 FFTPACK 计算下一个“正则(regular)”数。将输入填充到此长度可以显著提高 scipy.fftpack.fft 的性能。
scipy.signal 改进#
使用多相滤波(polyphase filtering)的重采样已在 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 的前向-后向滤波,但针对的是二阶节(second-order sections)。
离散时间线性系统#
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 改进#
布尔距离(Boolean distances)计算函数 scipy.spatial.pdist 已加速。改进程度因函数和输入大小而异。在许多情况下,可以预期 2 到 10 倍的加速。
新类 scipy.spatial.SphericalVoronoi 在球面表面构建 Voronoi 图。详见合并请求 gh-5232。
scipy.cluster 改进#
一种新的聚类算法——最近邻链算法(nearest neighbor chain algorithm),已在 scipy.cluster.hierarchy.linkage 中实现。因此,对于几种联动方法,可以预期显著的算法改进(从 \(O(N^3)\) 优化为 \(O(N^2)\))。
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
名称 - (访问/设置引发警告) - (设置引发警告) * 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 所取代,该函数可以执行所有这些转换以及兰金(Rankine)温标的相互转换。
向后不兼容的变更#
scipy.optimize#
optimize.bisect、optimize.brentq、optimize.brenth 和 optimize.ridder 的收敛准则现在与 numpy.allclose 的工作方式相同。
scipy.ndimage#
ndimage.interpolation.affine_transform 中的偏移量(offset)现在始终在应用矩阵之后添加,无论矩阵是使用一维还是二维数组指定的。
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() 提供用于广播(broadcasting)的参数时,在许多情况下返回的随机样本并不随机。该问题的一个简单例子是 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 版本。