SciPy 1.2.0 发布说明#
SciPy 1.2.0 是6个月辛勤工作的结晶。它包含了许多新功能、大量的错误修复、改进的测试覆盖率和更好的文档。此版本中有一些弃用和API变化,如下文所述。我们鼓励所有用户升级到此版本,因为有许多错误修复和优化。在升级之前,我们建议用户检查他们的代码是否使用了已弃用的SciPy功能(为此,请使用 python -Wd
运行您的代码,并检查 DeprecationWarning
)。我们的开发重点现在将转移到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。
此版本的亮点#
1-D 根查找改进,采用新的求解器
toms748
和新的统一接口root_scalar
新的
dual_annealing
优化方法结合了随机搜索和局部确定性搜索一种新的优化算法,``shgo``(单纯同调全局优化),用于无导数优化问题
在
scipy.spatial.transform
中,现在可以使用一种新的基于四元数的变换。
新功能#
scipy.ndimage
改进#
已为 scipy.ndimage.rotate
的 mirror
、wrap
和 reflect
模式添加了正确的样条系数计算。
scipy.fftpack
改进#
DCT-IV、DST-IV、DCT-I 和 DST-I 的正交化现在在 scipy.fftpack
中得到支持。
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
或类似映射的可调用对象,并并行化求解器(具有每代更新一次的副作用)。提供一个 int
将试验解决方案评估为 N 个并行部分。提供一个类似映射的可调用对象允许使用其他并行化方法(如 mpi4py
或 joblib
)。
dual_annealing``(以及下面的 ``shgo
)是一种强大的新型通用全局优化(GO)算法。dual_annealing
使用两个退火过程来加速向目标数学函数全局最小值的收敛。第一个退火过程控制随机马尔可夫链搜索,第二个退火过程控制确定性最小化。因此,双重退火是一种混合方法,它以高效的方式利用了随机和局部确定性搜索的优势。
shgo
(单纯同调全局优化) 是一个适用于解决黑箱和无导数优化 (DFO) 问题的类似算法。该算法通常在有限时间内收敛到全局解。收敛性适用于非线性不等式和等式约束。除了返回一个全局最小值外,该算法还会在每次迭代后返回所有其他全局和局部最小值。这使得它在探索域中的解时非常有用。
scipy.optimize.newton
现在可以接受标量或数组。
MINPACK
的使用现在是线程安全的,因此 MINPACK
+ 回调可以在多个线程中使用。
scipy.signal
改进#
数字滤波器设计函数现在包含一个参数来指定采样率。以前,数字滤波器只能使用归一化频率来指定,但不同的函数使用不同的尺度(例如,butter
使用 0 到 1,而 freqz
使用 0 到 π),这导致了错误和混淆。通过 fs
参数,现在可以直接将普通频率输入到函数中,归一化由内部处理。
find_peaks
及相关函数在峰的属性具有意外值(例如,突出度为0)时不再引发异常。取而代之的是给出 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),以及三维旋转的均匀随机采样(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 计算。
Brunner-Munzel 检验现在可以在 stats
和 mstats
中作为 brunnermunzel
使用。
scipy.linalg
改进#
scipy.linalg.lapack
现在使用矩形全打包存储(RFP)为上三角、下三角、对称或厄米矩阵公开了LAPACK例程;上梯形胖矩阵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
将不再在可能影响收敛的情况下使用 Halley 方法。