我有一個二維數組,也就是一個也是數組的序列數組。對於每個序列,我想計算自相關,因此對於(5,4)數組,我會得到5個結果或維數組(5,7)。numpy中多維數組的自相關
我知道我可以在第一維上循環,但這很慢,也是我的最後一招。有另一種方法嗎?
謝謝!
編輯:
根據所選擇的答案加上mtrw的評論,我有以下功能:
def xcorr(x):
"""FFT based autocorrelation function, which is faster than numpy.correlate"""
# x is supposed to be an array of sequences, of shape (totalelements, length)
fftx = fft(x, n=(length*2-1), axis=1)
ret = ifft(fftx * np.conjugate(fftx), axis=1)
ret = fftshift(ret, axes=1)
return ret
注意長度是在我的代碼一個全局變量,所以一定要申報它。我也沒有將結果限制爲實數,因爲我需要考慮複數。
+1了基於FFT的方法。至於(5,7)形狀的答案,你已經計算了循環相關性(http://en.wikipedia.org/wiki/Discrete_Fourier_transform#Circular_convolution_theorem_and_cross-correlation_theorem)。只需用3個零填充每行,以便譜乘法不會環繞,並且您將得到要求提供的原始問題。 – mtrw 2010-12-21 20:48:36