SciPy 1.3.0 发行说明#
SciPy 1.3.0 是 5 个月辛勤工作的结晶。它包含许多新功能、大量错误修复、改进的测试覆盖率和更好的文档。此版本中进行了一些 API 更改,详情如下。建议所有用户升级到此版本,因为它包含了大量的错误修复和优化。在升级之前,我们建议用户检查自己的代码是否使用了已弃用的 SciPy 功能(为此,请使用 python -Wd
运行您的代码并检查 DeprecationWarning
警告)。我们的开发重心现在将转移到 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
,可用于并行计算。
scipy.optimize
中有界标量函数求根器的 Cython API 已在新模块 scipy.optimize.cython_optimize
中通过 cimport
提供。此 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
已更新以使用一些较新的 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 起已被弃用。类似地,自 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
为真。
如果 xdata
和 ydata
的数据类型不同,scipy.optimize.curve_fit
不再会失败;它们现在都会自动转换为 float64
。
包括 binary_erosion
、binary_closing
和 binary_dilation
在内的 scipy.ndimage
函数现在要求迭代次数为整数值,这解决了许多报告的问题。
修复了 scipy.stats.wilcoxon
中 zero_method == "pratt"
情况下的正态近似。
修复了由于 stats 分布在 _argcheck()
内部设置成员变量而导致的错误概率、广播问题和线程安全问题。
scipy.optimize.newton
现在在以下情况下会正确地引发 RuntimeError
:当使用默认参数且导数值为零时(这是未能收敛的一种特殊情况)。
现已发布工具链路线图草案,其中包含了 Python 版本、C 标准和 NumPy 版本的兼容性计划。