scipy.signal.choose_conv_method¶
- scipy.signal.choose_conv_method(in1, in2, mode='full', measure=False)[源代码]¶
- 找出最快的卷积/相关方法。 - 它的存在主要是为了在 - method='auto'选项输入- convolve和- correlate。它还可用于确定- method用于相同数据类型/形状的许多不同卷积。此外,它还支持对卷积进行计时,以适应- method到特定的一组输入和/或硬件。- 参数
- in1array_like
- 传入卷积函数的第一个参数。 
- in2array_like
- 传递给卷积函数的第二个参数。 
- modestr{‘完整’,‘有效’,‘相同’},可选
- 指示输出大小的字符串: - full
- 输出是输入的全离散线性卷积。(默认) 
- valid
- 输出只包含那些不依赖于补零的元素。 
- same
- 输出的大小与 in1 ,相对于“完整”输出居中。 
 
- measure布尔值,可选
- 如果为True,则运行并计时 in1 和 in2 使用这两种方法,返回速度最快。如果为False(默认值),则使用预计算值预测最快的方法。 
 
- 退货
- method应力
- 一个字符串,指示哪种卷积方法最快,可以是“直接”或“FFT” 
- timesDICT,可选
- 包含每种方法所需时间(以秒为单位)的字典。只有在以下情况下才返回此值 - measure=True。
 
 - 注意事项 - 通常,对于随机选择的输入大小,该方法对于2D信号是99%的准确率,对于1D信号是85%的准确率。为提高精度,请使用 - measure=True通过对卷积进行计时来找到最快的方法。这可以用来避免查找最快的最小开销- method稍后,或者调整- method到一组特定的输入。- 为了测试这个功能,我们在AmazonEC2r5a.2xLarge机器上运行了实验。这些实验测量了在使用时所需时间的比率 - method='auto'以及最快方法所需的时间(即,- ratio = time_auto / min(time_fft, time_direct))。在这些实验中,我们发现:- 对于1D信号,该比率小于1.5的可能性为95%,对于2D信号,该比率小于2.5的可能性为99%。 
- 对于1D/2D信号,这一比值始终小于2.5/5。 
- 此函数对于耗时在1到10毫秒之间的一维卷积最不准确 - method='direct'。这方面(至少在我们的实验中)的一个很好的代理是- 1e6 <= in1.size * in2.size <= 1e7。
 - 2D结果几乎肯定会推广到3D/4D/ETC,因为实现是相同的(1D实现是不同的)。 - 以上所有数字都特定于EC2机器。但是,我们确实发现该函数在硬件上具有相当好的通用性。速度测试的质量与在这台机器上进行的调整这一功能的相同测试(2014年年中的15英寸MacBook Pro,内存为16 GB,英特尔i7处理器为2.5 GHz)相似(甚至略好)。 - 在某些情况下 - fftconvolve支持输入,但此函数返回 direct (例如,以防止浮点整数精度)。- 0.19 新版功能. - 示例 - 估计给定输入的最快方法: - >>> 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' - 然后可以将其应用于相同数据类型和形状的其他数组: - >>> 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)