本文簡要介紹 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。