SciPy 1.3.0 发布说明#
SciPy 1.3.0 是 5 个月辛勤工作的结晶。它包含了许多新功能、大量的错误修复、改进的测试覆盖率和更好的文档。此版本中有一些 API 变更,下面将对此进行说明。我们鼓励所有用户升级到此版本,因为有许多错误修复和优化。在升级之前,我们建议用户检查他们的代码是否使用了已弃用的 SciPy 功能(为此,请使用 python -Wd
运行您的代码,并检查是否有 DeprecationWarning
)。我们的开发重点现在将转移到 1.3.x 分支上的错误修复版本,以及在主分支上添加新功能。
此版本需要 Python 3.5+ 和 NumPy 1.13.3 或更高版本。
对于在 PyPy 上运行,需要 PyPy3 6.0+ 和 NumPy 1.15.0。
此版本的亮点#
三个新的
stats
函数,对pearsonr
的重写,以及对 Kolmogorov-Smirnov 两样本检验的精确计算。scipy.optimize
中用于有界标量函数求根的新 Cython API。显著提升了
CSR
和CSC
稀疏矩阵索引的性能。在
RotationSpline
中增加了对连续角速度和加速度的旋转插值支持。
新功能#
scipy.interpolate
改进#
引入了一个新的类 CubicHermiteSpline
。它是一个分段三次插值器,匹配观测值和一阶导数。现有的三次插值器 CubicSpline
、PchipInterpolator
和 Akima1DInterpolator
被设置为 CubicHermiteSpline
的子类。
scipy.io
改进#
对于属性-关系文件格式(ARFF),scipy.io.arff.loadarff
现在支持关系属性。
scipy.io.mmread
现在可以解析包含空行的 Matrix Market 格式文件。
scipy.linalg
改进#
为 ?syconv
例程添加了包装器,这些例程将通过三角矩阵分解给出的对称矩阵转换为两个矩阵,反之亦然。
scipy.linalg.clarkson_woodruff_transform
现在使用了一种利用稀疏性的算法。对于密集输入矩阵,这可能会提供60-90%的速度提升。真正稀疏的输入矩阵也应从改进的草图算法中受益,该算法现在正确地在 O(nnz(A))
时间内运行。
新增了计算对称Fiedler矩阵和Fiedler伴随矩阵的函数,分别命名为 scipy.linalg.fiedler
和 scipy.linalg.fiedler_companion
。这些函数可用于求解根。
scipy.ndimage
改进#
在某些情况下,高斯滤波器的性能可能会提高一个数量级,这得益于去除了对 np.polynomial
的依赖。例如,这可能会影响 scipy.ndimage.gaussian_filter
。
scipy.optimize
改进#
scipy.optimize.brute
最小化器获得了一个新的关键字 workers
,它可以用于并行化计算。
scipy.optimize
中的有界标量函数根查找器的 Cython API 现在可以通过 cimport
在新的模块 scipy.optimize.cython_optimize
中使用。这个 API 可以与 nogil
和 prange
一起使用,以循环遍历函数参数数组,从而比纯 Python 更快地求解根数组。
'interior-point'
现在是 linprog
的默认方法,当所需的 scikits(scikit-umfpack 和 scikit-sparse)可用时,'interior-point'
现在使用 SuiteSparse 来处理稀疏问题。在基准问题(gh-10026)上,执行时间通常减少了 2-3 倍。此外,新增了 method='revised simplex'
。它不如 method='interior-point'
快速或稳健,但它是一个更快、更稳健且同样准确的替代方案,适用于传统的 method='simplex'
。
differential_evolution
现在可以使用 Bounds
类来指定函数优化参数的边界。
scipy.optimize.dual_annealing
性能改进与一些内部代码的向量化相关。
scipy.signal
改进#
scipy.signal.cont2discrete
现在支持两种额外的离散化方法:impulse
和 foh
。
scipy.signal.firls
现在使用更快的求解器。
scipy.signal.detrend
在某些情况下现在占用的物理内存更少,这可以通过使用新的 overwrite_data
关键字参数来利用。
scipy.signal.firwin
的 pass_zero
参数现在接受新的字符串参数,允许指定所需的滤波器类型:'bandpass'
、'lowpass'
、'highpass'
和 'bandstop'
。
scipy.signal.sosfilt
由于算法中全局解释器锁(GIL)的保留较低,可能会有更好的性能。
scipy.sparse
改进#
csgraph.dijsktra
添加了一个新关键字,允许用户查询到任意传入索引的最短路径,而不是到每个传入索引的最短路径。
scipy.sparse.linalg.lsmr
在大规模问题上的性能提升了大约10%。
改进了 scipy.sparse.linalg.lobpcg
所用算法的性能并减少了物理内存占用。
CSR
和 CSC
稀疏矩阵的花式索引性能已大幅提升。
scipy.spatial
改进#
scipy.spatial.ConvexHull
现在有一个 good
属性,可以与 QGn
Qhull 选项一起使用,以确定凸包的哪些外部面从外部查询点可见。
scipy.spatial.cKDTree.query_ball_point
已经现代化,使用了包括GIL处理和异常转换在内的一些较新的Cython特性。修复了 return_sorted=True
和标量查询的问题,并添加了一个名为 return_length
的新模式。return_length
只计算返回的索引列表的长度,而不是每次都分配数组。
scipy.spatial.transform.RotationSpline
已添加,以实现具有连续角速度和加速度的旋转插值。
scipy.stats
改进#
添加了一个新函数来计算 Epps-Singleton 检验统计量,scipy.stats.epps_singleton_2samp
,该函数可应用于连续和离散分布。
新增了函数 scipy.stats.median_absolute_deviation 和 scipy.stats.gstd
(几何标准差)。scipy.stats.combine_pvalues
方法现在支持 pearson
、tippett
和 mudholkar_george
的 p 值组合方法。
scipy.stats.ortho_group
和 scipy.stats.special_ortho_group
的 rvs(dim)
函数的算法从 O(dim^4)
实现更新为 O(dim^3)
,这为 dim>100
的情况带来了显著的速度提升。
对 scipy.stats.pearsonr
的重写,使用更稳健的算法,对潜在的病态输入提供有意义的异常和警告,并修复原始实现中至少五个独立报告的问题。
改进了 hypergeom.logcdf
和 hypergeom.logsf
的精度。
为 Kolmogorov-Smirnov (KS) 双样本检验添加了精确计算,取代了之前用于双侧检验 stats.ks_2samp 的近似计算。同时添加了一个单侧双样本 KS 检验,并为 stats.ks_2samp 添加了一个关键字 alternative
。
向后不兼容的更改#
scipy.interpolate
更改#
scipy.interpolate
中的函数(spleval
、spline
、splmake
和 spltopp
)以及 scipy.misc
中的函数(bytescale
、fromimage
、imfilter
、imread
、imresize
、imrotate
、imsave
、imshow
、toimage
)已被移除。前者自 v0.19.0 起已被弃用,后者自 v1.0.0 起已被弃用。同样,自 v1.0.0 起已被弃用的 scipy.misc
中的别名(comb
、factorial
、factorial2
、factorialk
、logsumexp
、pade
、info
、source
、who
)也被移除。可以使用 SciPy v1.1.0 文档 来追踪这些被重新定位的函数的新导入位置。
scipy.linalg
更改#
对于 pinv
、pinv2
和 pinvh
,默认的截断值已为一致性而更改(具体数值请参阅文档)。
scipy.optimize
变化#
linprog
的默认方法是 'interior-point'
。该方法的鲁棒性和速度是以一定的代价换来的:解可能无法精确到机器精度,或者与由约束定义的多面体的顶点不对应。要恢复到原始的单纯形法,请包含参数 method='simplex'
。
scipy.stats
更改#
之前,ks_2samp(data1, data2)
会运行一个双侧检验并返回近似的p值。新的签名,ks_2samp(data1, data2, alternative="two-sided", method="auto")
,默认仍然运行双侧检验,但对于小样本返回精确的p值,对于大样本返回近似值。method="asymp"
等同于旧版本,但 auto
是更好的选择。
其他更改#
我们的教程已扩展,新增了关于全局优化器的新章节。
stats.distributions
教程已经进行了重构。
scipy.optimize
现在正确地将结果的收敛标志设置为 CONVERR
,即收敛错误,对于有界标量函数根查找器,如果超过了最大迭代次数,disp
为假,且 full_output
为真。
scipy.optimize.curve_fit
如果 xdata
和 ydata
的 dtypes 不同,不再失败;它们现在都被自动转换为 float64
。
scipy.ndimage
函数,包括 binary_erosion
、binary_closing
和 binary_dilation
,现在需要一个整数值作为迭代次数,这解决了一些已报告的问题。
修复了在 scipy.stats.wilcoxon
中 zero_method == "pratt"
情况下的正态近似。
修复了与统计分布在 _argcheck()
内部设置成员变量相关的概率错误、广播问题和线程安全问题。
scipy.optimize.newton
现在在以下情况下正确地引发 RuntimeError
:当使用默认参数并且如果获得值为零的导数时(这是未能收敛的特殊情况)。
现在提供了一个草案工具链路线图,概述了一个包括Python版本、C标准和NumPy版本的兼容性计划。