SciPy 1.2.0 发行说明#
SciPy 1.2.0 是 6 个月辛勤工作的结晶。它包含许多新功能、大量的错误修复、改进的测试覆盖率和更好的文档。此版本中存在一些弃用和 API 更改,如下所述。我们鼓励所有用户升级到此版本,因为它有大量的错误修复和优化。在升级之前,我们建议用户检查他们自己的代码是否使用了已弃用的 SciPy 功能(要这样做,请使用 python -Wd
运行代码并检查 DeprecationWarning
s)。我们现在的开发重点将转移到 1.2.x 分支上的错误修复版本,以及在主分支上添加新功能。
此版本需要 Python 2.7 或 3.4+ 和 NumPy 1.8.2 或更高版本。
注意
这将是支持 Python 2.7 的最后一个 SciPy 版本。因此,1.2.x 系列将是长期支持 (LTS) 版本;我们将回溯修复错误直到 2020 年 1 月 1 日。
对于在 PyPy 上运行,需要 PyPy3 6.0+ 和 NumPy 1.15.0。
此版本亮点#
使用新的求解器
toms748
和新的统一接口root_scalar
改进了 1-D 根查找新的
dual_annealing
优化方法,它结合了随机和局部确定性搜索一种新的优化算法,
shgo
(单纯同源全局优化),用于无导数优化问题基于四元数变换的新类别可在
scipy.spatial.transform
中使用
新功能#
scipy.ndimage
改进#
已为 scipy.ndimage.rotate
的 mirror
、wrap
和 reflect
模式添加了适当的样条系数计算。
scipy.fftpack
改进#
scipy.fftpack
现在支持 DCT-IV、DST-IV、DCT-I 和 DST-I 正交化。
scipy.interpolate
改进#
scipy.interpolate.pade
现在接受一个新的分子阶数参数。
scipy.cluster
改进#
scipy.cluster.vq.kmeans2
获得了一种新的初始化方法,kmeans++。
scipy.special
改进#
函数 softmax
已添加到 scipy.special
中。
scipy.optimize
改进#
一维非线性求解器已获得统一的接口 scipy.optimize.root_scalar
,类似于多维求解器的 scipy.optimize.root
接口。 scipy.optimize.root_scalar(f, bracket=[a ,b], method="brenth")
等效于 scipy.optimize.brenth(f, a ,b)
。如果未指定 method
,则会根据括号和可用导数的数量选择合适的方法。
Alefeld、Potra 和 Shi 的用于在封闭区间内求根的所谓算法 748 已添加为 scipy.optimize.toms748
。这提供了保证收敛到根,并且每次函数评估的收敛速度约为 1.65(对于表现良好的函数)。
differential_evolution
现在具有 updating
和 workers
关键字。第一个关键字用于在连续更新最佳解向量(默认)或每个生成周期更新一次之间进行选择。连续更新可以加快收敛速度。workers
关键字接受 int
或类似 map 的可调用对象,并并行化求解器(具有每个生成周期更新一次的副作用)。提供 int
会在 N 个并行部分中评估试解。提供类似 map 的可调用对象允许使用其他并行化方法(例如 mpi4py
或 joblib
)。
dual_annealing
(以及下面的 shgo
)是一种强大的新型通用全局优化 (GO) 算法。dual_annealing
使用两个退火过程来加速收敛到目标数学函数的全局最小值。第一个退火过程控制随机马尔可夫链搜索,第二个退火过程控制确定性最小化。因此,双重退火是一种混合方法,以有效的方式利用了随机搜索和局部确定性搜索。
shgo
(单纯同调全局优化)是一种类似的算法,适用于解决黑盒和无导数优化 (DFO) 问题。该算法通常在有限时间内收敛到全局解。收敛适用于非线性不等式和等式约束。除了返回全局最小值之外,该算法还返回每次迭代后发现的任何其他全局和局部最小值。这使得它可用于探索域中的解。
scipy.optimize.newton
现在可以接受标量或数组。
MINPACK
的使用现在是线程安全的,这样可以在多个线程上使用 MINPACK
+ 回调。
scipy.signal
改进#
数字滤波器设计函数现在包含一个指定采样率的参数。以前,数字滤波器只能使用归一化频率指定,但是不同的函数使用不同的比例(例如,butter
为 0 到 1,而 freqz
为 0 到 π),导致错误和混乱。使用 fs
参数,现在可以直接将普通频率输入到函数中,并在内部处理归一化。
如果峰值的属性具有意外的值(例如,突出度为 0),则 find_peaks
和相关函数不再引发异常。而是给出 PeakPropertyWarning
。
新的关键字参数 plateau_size
已添加到 find_peaks
。plateau_size
可用于根据峰值的平顶长度选择峰值。
scipy.signal
中的 welch()
和 csd()
方法现在支持使用 average='mean'
关键字计算中值平均 PSD。
scipy.sparse
改进#
scipy.sparse.bsr_matrix.tocsr
方法现在直接实现,而不是通过 COO 格式转换,并且 scipy.sparse.bsr_matrix.tocsc
方法现在也通过 CSR 转换路由,而不是通过 COO。现在,两种转换的效率都提高了。
修复了 scipy.sparse.linalg
中 SuperLU 或 UMFPACK 求解器在具有非规范格式的矩阵上崩溃的问题。如果需要,求解器包装器会在调用 SuperLU 或 UMFPACK 求解器之前规范化矩阵。
修复了 scipy.sparse.linalg.lobpcg() 的 largest
选项,使其具有正确的(和预期的)行为。特征值的顺序与 ARPACK 求解器 (eigs()
) 一致,即,最小特征值按升序排列,最大特征值按降序排列。
scipy.sparse.random
函数现在更快,并且还支持通过将适当的值传递给 dtype
参数来支持整数和复数值。
scipy.spatial
改进#
修改了函数 scipy.spatial.distance.jaccard
,以便在比较两个全零向量时返回 0 而不是 np.nan
。
在 scipy.spatial.distance.jensenshannon
下添加了对 Jensen Shannon 距离(散度的平方根)的支持。
在函数 scipy.spatial.cKDTree.query_ball_point() 中添加了一个可选关键字,用于对返回的索引进行排序或不排序。不对索引进行排序可以加快调用速度。
在 scipy.spatial.transform
中可以使用一类新的基于四元数的变换,包括旋转的球面线性插值 (Slerp
)、与四元数、欧拉角和通用旋转和反转能力的相互转换 (spatial.transform.Rotation),以及 3D 旋转的均匀随机采样 (spatial.transform.Rotation.random)。
scipy.stats
改进#
现在支持 Yeo-Johnson 幂变换 (yeojohnson
, yeojohnson_llf
, yeojohnson_normmax
, yeojohnson_normplot
)。与 Box-Cox 变换不同,Yeo-Johnson 变换可以接受负值。
在新的函数 rvs_ratio_uniforms
中,添加了一种仅基于密度来采样随机变量的通用方法。
添加了 Yule-Simon 分布 (yulesimon
) – 这是一种新的离散概率分布。
stats
和 mstats
现在可以使用一种新的回归方法 siegelslopes
,这是一种稳健的线性回归算法
scipy.stats.gaussian_kde
现在能够处理加权样本,并且性能应该有适度的提高
现在支持 scipy.stats.levy_stable
的 Levy 稳定参数估计、PDF 和 CDF 计算。
现在可以在 stats
和 mstats
中使用 Brunner-Munzel 测试,即 brunnermunzel
。
scipy.linalg
改进#
scipy.linalg.lapack
现在使用矩形全压缩存储 (RFP) 暴露 LAPACK 例程,用于上三角、下三角、对称或 Hermitian 矩阵;上梯形胖矩阵 RZ 分解例程现在也可用。
已弃用的功能#
scipy.special
中的函数 hyp2f0
、hyp1f2
和 hyp3f0
已被弃用。
向后不兼容的更改#
现在需要 LAPACK 3.4.0 或更高版本。不再支持使用 Apple Accelerate 构建。
函数 scipy.linalg.subspace_angles(A, B)
现在可以给出所有角度的正确结果。在此之前,该函数仅返回大于 π/4 的角度的正确值。
已删除对 Bento 构建系统的支持。Bento 已经有好几年没有维护,并且没有良好的 Python 3 或 wheel 支持,因此现在是时候将其删除。
scipy.optimize.lingprog method=simplex
回调函数的必需签名已更改。在迭代开始之前,单纯形求解器首先将问题转换为标准形式,该标准形式通常与用户定义的问题具有不同的变量或约束。以前,单纯形求解器会向用户指定的回调函数传递几个单独的参数,例如与此标准形式问题对应的当前解向量 xk
。不幸的是,标准形式问题和用户定义问题之间的关系没有文档记录,限制了传递给回调函数的信息的实用性。
除了大量的错误修复更改外,单纯形求解器现在向用户指定的回调函数传递一个单一的 OptimizeResult
对象,其中包含直接对应于用户定义问题的信息。在未来的版本中,此 OptimizeResult
对象可能会扩展以包含其他信息,例如与标准形式问题对应的变量以及有关标准形式和用户定义问题之间关系的信息。
scipy.sparse.random
的实现已更改,这会影响某些矩阵形状和给定种子下 sparse.random
和 sparse.rand
返回的数值。
scipy.optimize.newton
在负面影响收敛的情况下将不再使用哈雷方法。