本文简要介绍 python 语言中 scipy.signal.choose_conv_method
的用法。
用法:
scipy.signal.choose_conv_method(in1, in2, mode='full', measure=False)#
找到最快的卷积/相关方法。
这主要存在于
convolve
和correlate
中的method='auto'
选项期间调用。它还可用于确定相同 dtype/shape 的许多不同卷积的method
的值。此外,它还支持对卷积进行计时,以使method
的值适应一组特定的输入和/或硬件。- in1: array_like
第一个参数传入卷积函数。
- in2: array_like
第二个参数传入卷积函数。
- mode: str {‘full’, ‘valid’, ‘same’},可选
指示输出大小的字符串:
full
输出是输入的完全离散线性卷积。 (默认)
valid
输出仅包含那些不依赖零填充的元素。
same
输出与 in1 大小相同,以 ‘full’ 输出为中心。
- measure: 布尔型,可选
如果为 True,则使用这两种方法运行并计算 in1 和 in2 的卷积,并以最快的速度返回。如果为 False(默认),则使用预先计算的值预测最快的方法。
- method: str
指示哪种卷积方法最快的字符串,‘direct’ 或 ‘fft’
- times: 字典,可选
包含每种方法所需时间(以秒为单位)的字典。此值仅在
measure=True
时返回。
参数 ::
返回 ::
注意:
通常,对于随机选择的输入大小,这种方法对于 2D 信号的准确率为 99%,对于 1D 信号的准确率为 85%。为了精确,请使用
measure=True
通过对卷积计时来找到最快的方法。这可用于避免稍后找到最快的method
的最小开销,或使method
的值适应特定的一组输入。实验在 Amazon EC2 r5a.2xlarge 机器上运行以测试此函数。这些实验测量了使用
method='auto'
所需时间与最快方法(即ratio = time_auto / min(time_fft, time_direct)
)所需时间之间的比率。在这些实验中,我们发现:对于 1D 信号,该比率有 95% 的可能性小于 1.5,对于 2D 信号有 99% 的可能性小于 2.5。
对于 1D/2D 信号,该比率始终小于 2.5/5。
对于
method='direct'
需要 1 到 10 毫秒的一维卷积,此函数最不准确。一个很好的代理(至少在我们的实验中)是1e6 <= in1.size * in2.size <= 1e7
。
2D 结果几乎可以肯定推广到 3D/4D/等,因为实现是相同的(1D 实现是不同的)。
以上所有数字均特定于 EC2 机器。然而,我们确实发现这个函数在硬件上具有相当不错的通用性。速度测试与在机器上执行的相同测试(具有 16GB RAM 和 2.5GHz Intel i7 处理器的 2014 年中期 15 英寸 MacBook Pro)具有相似的质量(甚至稍好一些)。
有些情况下scipy.signal.fftconvolve支持输入,但此函数返回直接的(例如,防止浮点整数精度)。
例子:
估计给定输入的最快方法:
>>> import numpy as np >>> from scipy import signal >>> rng = np.random.default_rng() >>> img = rng.random((32, 32)) >>> filter = rng.random((8, 8)) >>> method = signal.choose_conv_method(img, filter, mode='same') >>> method 'fft'
然后可以将其应用于具有相同 dtype 和形状的其他数组:
>>> img2 = rng.random((32, 32)) >>> filter2 = rng.random((8, 8)) >>> corr2 = signal.correlate(img2, filter2, mode='same', method=method) >>> conv2 = signal.convolve(img2, filter2, mode='same', method=method)
相关用法
- Python SciPy signal.chirp用法及代码示例
- Python SciPy signal.cheb2ord用法及代码示例
- Python SciPy signal.cheb1ord用法及代码示例
- Python SciPy signal.cheby2用法及代码示例
- Python SciPy signal.cheby1用法及代码示例
- Python SciPy signal.check_COLA用法及代码示例
- Python SciPy signal.check_NOLA用法及代码示例
- Python SciPy signal.czt_points用法及代码示例
- Python SciPy signal.coherence用法及代码示例
- Python SciPy signal.csd用法及代码示例
- Python SciPy signal.correlate2d用法及代码示例
- Python SciPy signal.cubic用法及代码示例
- Python SciPy signal.correlation_lags用法及代码示例
- Python SciPy signal.convolve2d用法及代码示例
- Python SciPy signal.cspline1d用法及代码示例
- Python scipy.signal.czt用法及代码示例
- Python SciPy signal.cwt用法及代码示例
- Python SciPy signal.convolve用法及代码示例
- Python SciPy signal.cont2discrete用法及代码示例
- Python SciPy signal.cspline1d_eval用法及代码示例
- Python SciPy signal.cmplx_sort用法及代码示例
- Python SciPy signal.correlate用法及代码示例
- Python SciPy signal.residue用法及代码示例
- Python SciPy signal.iirdesign用法及代码示例
- Python SciPy signal.max_len_seq用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.signal.choose_conv_method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。