我有一个二维数组,也就是一个也是数组的序列数组。对于每个序列,我想计算自相关,因此对于(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