SciPy 1.3.0 发行说明#
SciPy 1.3.0 是 5 个月辛勤工作的成果。它包含许多新功能、大量错误修复、改进的测试覆盖率和更好的文档。此版本中进行了一些 API 更改,这些更改在下面记录。鼓励所有用户升级到此版本,因为其中有大量的错误修复和优化。在升级之前,我们建议用户检查他们自己的代码是否使用了已弃用的 SciPy 功能(要执行此操作,请使用 python -Wd
运行您的代码,并检查 DeprecationWarning
s)。我们的开发注意力现在将转移到 1.3.x 分支的错误修复版本,以及在 master 分支上添加新功能。
此版本需要 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
,可以用于并行计算。
通过 cimport
,在新的模块 scipy.optimize.cython_optimize
中提供了一个用于 scipy.optimize
中有界标量函数求根器的 Cython API。这个 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'
。
由于算法中全局解释器锁 (GIL) 的保留减少,scipy.signal.sosfilt
的性能可能有所提高。
scipy.sparse
改进#
在 csgraph.dijsktra
中添加了一个新的关键字,允许用户查询到任何传入索引的最短路径,而不是到每个传入索引的最短路径。
在大型问题上,scipy.sparse.linalg.lsmr
的性能提高了大约 10%。
改进了 scipy.sparse.linalg.lobpcg
使用的算法的性能并减少了物理内存占用。
CSR
和 CSC
稀疏矩阵的 fancy indexing 性能得到了显著提高。
scipy.spatial
改进#
scipy.spatial.ConvexHull
现在具有一个 good
属性,可以与 QGn
Qhull 选项一起使用,以确定从外部查询点可以看到凸包的哪些外部面。
scipy.spatial.cKDTree.query_ball_point
已现代化,可以使用一些较新的 Cython 功能,包括 GIL 处理和异常转换。修复了 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 版本起已被弃用。同样,scipy.misc
中的别名(comb
、factorial
、factorial2
、factorialk
、logsumexp
、pade
、info
、source
、who
)也已被移除,它们自 v1.0.0 版本起已被弃用。可以参考 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
的教程已进行了重构。
如果已超出最大迭代次数,disp
为 false,并且 full_output
为 true,则对于有界标量函数求根器,scipy.optimize
现在会正确地将结果的收敛标志设置为 CONVERR
,表示收敛错误。
如果 xdata
和 ydata
的 dtypes 不同,scipy.optimize.curve_fit
不再会失败;现在它们都会自动转换为 float64
。
scipy.ndimage
中的函数,包括 binary_erosion
、binary_closing
和 binary_dilation
,现在要求迭代次数为整数值,这缓解了许多报告的问题。
修复了 scipy.stats.wilcoxon
中 zero_method == "pratt"
的情况下正态近似的问题。
修复了与 stats 分布在 _argcheck()
中设置成员变量相关的错误概率、广播问题和线程安全问题。
在以下情况下,scipy.optimize.newton
现在会正确引发 RuntimeError
:当使用默认参数且获得导数值为零时(这是无法收敛的特殊情况)。
现在提供了一个工具链路线图草案,其中列出了包括 Python 版本、C 标准和 NumPy 版本在内的兼容性计划。