我不知道numpy/scipy中是否有一個函數用於1d數組循環卷積。 scipy.signal.convolve()
function只提供「模式」而不提供「邊界」,而signal.convolve2d()
函數需要2d數組作爲輸入。Python:1d數組循環卷積
我需要做這個比較開放與循環卷積作爲時間序列作業的一部分。
我不知道numpy/scipy中是否有一個函數用於1d數組循環卷積。 scipy.signal.convolve()
function只提供「模式」而不提供「邊界」,而signal.convolve2d()
函數需要2d數組作爲輸入。Python:1d數組循環卷積
我需要做這個比較開放與循環卷積作爲時間序列作業的一部分。
由於這是作業,我將略去一些細節。
由definition of convolution,如果追加的信號一個給自己,然後AA和b之間的卷積將包含一個和b循環卷積內。
例如,考慮以下因素:
import numpy as np
from scipy import signal
%pylab inline
a = np.array([1] * 10)
b = np.array([1] * 10)
plot(signal.convolve(a, b));
這是標準的卷積。現在這一點,但是
plot(signal.convolve(a, np.concatenate((b, b))));
在這最後的數字,嘗試看看哪裏是循環卷積,以及如何推廣這個結果。
通過卷積定理,您可以使用傅里葉變換來獲得循環卷積。
import numpy as np
def conv_circ(signal, ker):
'''
signal: real 1D array
ker: real 1D array
signal and ker must have same shape
'''
return np.real(np.fft.ifft(np.fft.fft(signal)*np.fft.fft(ker)))
這比在我的PC上使用'scipy.signal.convolve'的其他方法快得多......不確定缺點是什麼,但我喜歡它。 –
您是否嘗試過[''scipy.ndimage.filters.convolve1d''(http://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.ndimage.filters .convolve1d.html#scipy.ndimage.filters.convolve1d)?這提供了更多的選項,比如''wrap''(基本上是循環的),但是隻有當內核足夠「大」時。 – MSeifert