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 diagrams),
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 的滤波更快。
添加了 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 最小化现在仅在调用者未设置任何限制时才为最大迭代次数或函数评估次数设置默认值。在某些收敛缓慢且仅设置了 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 在球体表面构建泰森多边形图。详情请参阅合并请求 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
名称 - (访问/设置会引发警告) - (设置会引发警告) * 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 中的偏移量现在始终在应用矩阵后添加,无论矩阵是使用一维数组还是二维数组指定。
scipy.stats#
stats.ks_2samp 在输入不是实数或包含 NaN 时曾返回无意义的值。现在,它会为此类输入引发异常。
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。