SciPy 0.19.0 发行说明#
SciPy 0.19.0 是 7 个月辛勤工作的结晶。它包含许多新功能、大量的错误修复、改进的测试覆盖率和更好的文档。此版本中存在一些弃用和 API 更改,如下所述。建议所有用户升级到此版本,因为它包含大量错误修复和优化。此外,我们的开发注意力现在将转移到 0.19.x 分支上的错误修复版本,以及在主分支上添加新功能。
此版本需要 Python 2.7 或 3.4-3.6 以及 NumPy 1.8.2 或更高版本。
此版本的亮点包括
一个统一的外部函数接口层,
scipy.LowLevelCallable
。通过 cimport scipy.special.cython_special 从
scipy.special
模块获取标量、类型化通用函数的 Cython API。
新功能#
外部函数接口改进#
scipy.LowLevelCallable
为在 Python 空间中包装底层编译的回调函数提供了一个新的统一接口。它支持 Cython 导入的“api”函数、ctypes 函数指针、CFFI 函数指针、PyCapsules
、Numba jitted 函数等。有关详细信息,请参阅 gh-6509。
scipy.linalg
改进#
函数 scipy.linalg.solve
获取了另外两个关键字 assume_a
和 transposed
。底层 LAPACK 例程被替换为“专家”版本,现在也可用于求解对称、埃尔米特和正定系数矩阵。此外,病态矩阵现在会导致发出警告,其中包含估计的条件数信息。旧的 sym_pos
关键字保留以实现向后兼容性,但它与使用 assume_a='pos'
相同。此外,debug
关键字已弃用,它没有任何功能,只是打印 overwrite_<a, b>
值。
添加了函数 scipy.linalg.matrix_balance
以使用 LAPACK xGEBAL 例程族执行所谓的矩阵平衡。这可用于通过对角相似变换近似使行和列范数相等。
函数 scipy.linalg.solve_continuous_are
和 scipy.linalg.solve_discrete_are
具有数值上更稳定的算法。这些函数还可以求解广义代数矩阵黎卡提方程。此外,两者都获得了 balanced
关键字来打开和关闭平衡。
scipy.spatial
改进#
scipy.spatial.SphericalVoronoi.sort_vertices_of_regions
已使用 Cython 重写以提高性能。
scipy.spatial.SphericalVoronoi
可以处理超过 20 万个点(至少 1000 万个),并且性能得到了提高。
添加了函数 scipy.spatial.distance.directed_hausdorff
来计算有向 Hausdorff 距离。
scipy.spatial.cKDTree
的 count_neighbors
方法通过新的关键字 weights
和 cumulative
获得了执行加权对计数的能力。有关详细信息,请参阅 gh-5647。
scipy.spatial.distance.pdist
和 scipy.spatial.distance.cdist
现在支持非双精度自定义度量标准。
scipy.ndimage
改进#
回调函数 C API 在 Python 2.7 中支持 PyCapsules。
多维滤波器现在允许为不同的轴设置不同的外推模式。
scipy.optimize
改进#
scipy.optimize.basinhopping
全局最小化器获得了一个新的关键字 seed,可用于设置随机数生成器的种子并获得可重复的最小化。
scipy.optimize.curve_fit
中的关键字 sigma 被重载,也可以接受数据中误差的协方差矩阵。
scipy.signal
改进#
函数 scipy.signal.correlate
和 scipy.signal.convolve
有一个新的可选参数 method。 auto 的默认值估计两种计算方法中最快的方法,即直接方法和傅里叶变换方法。
添加了一个新函数来选择卷积/相关方法,即 scipy.signal.choose_conv_method
,如果对许多大小相同的数组执行卷积或相关运算,则此函数可能适用。
添加了新函数来计算输入信号的复数短时傅里叶变换,并反转变换以恢复原始信号:scipy.signal.stft
和 scipy.signal.istft
。 此实现还修复了以前在请求复数输出数据时 scipy.signal.spectrogram
输出不正确的问题。
添加了函数 scipy.signal.sosfreqz
,用于从二阶节计算频率响应。
添加了函数 scipy.signal.unit_impulse
,用于方便地生成脉冲函数。
添加了函数 scipy.signal.iirnotch
,用于设计二阶 IIR 陷波滤波器,该滤波器可用于从信号中消除频率分量。 添加了双函数 scipy.signal.iirpeak
,用于计算二阶 IIR 峰值(共振)滤波器的系数。
添加了函数 scipy.signal.minimum_phase
,用于将线性相位 FIR 滤波器转换为最小相位。
当在某些 n 维数组上运算时,如果 n > 1,则函数 scipy.signal.upfirdn
和 scipy.signal.resample_poly
现在速度明显更快。当要过滤的轴上的数组大小较小(约为 < 1k 个样本)时,计算时间的缩短幅度最大。
scipy.fftpack
改进#
快速傅里叶变换例程现在接受 np.float16 输入,并将它们向上转换为 np.float32。 以前,它们会引发错误。
scipy.cluster
改进#
scipy.cluster.hierarchy.linkage
的 "centroid"
和 "median"
方法已显著加速。 解决了在大型输入数据(超过 16 GB)上使用 linkage
的长期存在的问题。
scipy.sparse
改进#
添加了函数 scipy.sparse.save_npz
和 scipy.sparse.load_npz
,为某些稀疏格式提供简单的序列化。
更新了类 bsr_matrix、csc_matrix 和 csr_matrix 的 prune 方法,以便在特定条件下重新分配支持数组,从而减少内存使用。
向类 coo_matrix、csc_matrix、csr_matrix 和 bsr_matrix 添加了方法 argmin 和 argmax。
新函数 scipy.sparse.csgraph.structural_rank
计算具有给定稀疏模式的图的结构秩。
新函数 scipy.sparse.linalg.spsolve_triangular
求解具有三角左侧矩阵的稀疏线性系统。
scipy.special
改进#
来自 scipy.special
的通用函数的标量类型版本可通过从新模块 scipy.special.cython_special
进行 cimport
在 Cython 空间中获得。 对于标量参数,这些标量函数预计会比通用函数快得多。 有关详细信息,请参阅 scipy.special
教程。
函数 scipy.special.geterr
和 scipy.special.seterr
以及上下文管理器 scipy.special.errstate
提供了对特殊函数错误的更好控制。
正交多项式根函数的名称已更改为与与正交多项式相关的其他函数保持一致。 例如,scipy.special.j_roots
已重命名为 scipy.special.roots_jacobi
,以便与相关函数 scipy.special.jacobi
和 scipy.special.eval_jacobi
保持一致。 为了保持向后兼容性,旧名称已保留为别名。
Wright Omega 函数实现为 scipy.special.wrightomega
。
scipy.stats
改进#
添加了函数 scipy.stats.weightedtau
。它提供了 Kendall’s tau 的加权版本。
新类 scipy.stats.multinomial
实现了多项式分布。
新类 scipy.stats.rv_histogram
从分箱数据样本构建具有分段线性 CDF 的连续单变量分布。
新类 scipy.stats.argus
实现了 Argus 分布。
scipy.interpolate
改进#
新类 scipy.interpolate.BSpline
表示样条曲线。 BSpline
对象包含节点和系数,并且可以评估样条曲线。此格式与 FITPACK 一致,因此可以执行例如
>>> t, c, k = splrep(x, y, s=0)
>>> spl = BSpline(t, c, k)
>>> np.allclose(spl(x), y)
spl*
函数, scipy.interpolate.splev
, scipy.interpolate.splint
, scipy.interpolate.splder
和 scipy.interpolate.splantider
,为了向后兼容,接受 BSpline
对象和 (t, c, k)
元组。
对于多维样条曲线,c.ndim > 1
,BSpline
对象与分段多项式 scipy.interpolate.PPoly
一致。这意味着 BSpline
对象与 scipy.interpolate.splprep
不立即一致,并且不能 执行 >>> BSpline(*splprep([x, y])[0])
。有关精确等效的示例,请查阅 scipy.interpolate
测试套件。
在新代码中,最好使用 scipy.interpolate.BSpline
对象,而不是直接操作 (t, c, k)
元组。
新函数 scipy.interpolate.make_interp_spline
根据数据点和边界条件构造插值样条曲线。
新函数 scipy.interpolate.make_lsq_spline
根据数据点构造最小二乘样条逼近。
scipy.integrate
改进#
现在 scipy.integrate.fixed_quad
支持向量值函数。
已弃用的功能#
scipy.interpolate.splmake、scipy.interpolate.spleval 和 scipy.interpolate.spline 已弃用。splmake/spleval 使用的格式与 splrep/splev 不一致,这让用户感到困惑。
scipy.special.errprint 已弃用。 scipy.special.seterr
中提供了改进的功能。
不推荐使用使用所选指标不需要的参数调用 scipy.spatial.distance.pdist
或 scipy.spatial.distance.cdist
。此外,指标 “old_cosine” 和 “old_cos” 已弃用。
向后不兼容的更改#
已删除已弃用的 scipy.weave
子模块。
scipy.spatial.distance.squareform
现在返回与输入具有相同 dtype 的数组,而不是始终返回 float64。
scipy.special.errprint 现在返回一个布尔值。
函数 scipy.signal.find_peaks_cwt
现在返回一个数组,而不是列表。
scipy.stats.kendalltau
现在在输入包含平局的情况下计算正确的 p 值。p 值也与 scipy.stats.mstats.kendalltau
和 R 计算的 p 值相同。如果输入不包含平局,则与之前的实现相比没有变化。
函数 scipy.linalg.block_diag
将不再忽略零大小的矩阵。相反,它将插入适当大小的零行或零列。有关更多详细信息,请参阅 gh-4908。
其他更改#
SciPy wheels 现在将在所有平台上报告它们对 numpy
的依赖。进行此更改的原因是,Numpy wheels 可用,并且 pip 升级行为最终正在朝着更好的方向发展(对于 pip >= 8.2
,请使用 --upgrade-strategy=only-if-needed
;该行为将在下一个主要版本的 pip
中成为默认行为)。
与之前的 scipy 版本相比,使用 kind="cubic"
和 "quadratic"
的 scipy.interpolate.interp1d
返回的数值可能会发生变化。如果您的代码依赖于特定的数值(即,插值器的实现细节),您可能需要仔细检查您的结果。