是否可以在具有numpy / scipy / matplotlib功能的1D阵列上执行循环交叉/自相关?我看过numpy.correlate()和matplotlib.pyplot.xcorr(基于numpy函数),两者似乎都无法进行循环互相关。
为了说明不同之处,我将使用[1,2,3,4]数组的示例。通过循环相关,进行周期性假设,滞后1看起来像[2,3,4,1]。我发现的python函数似乎只使用零填充,即[2,3,4,0]。有没有办法让这些函数进行循环关联?如果没有,是否有循环关联的标准解决方法?
答案 0 :(得分:10)
您可以使用FFT实现定期(a.k.a.圆形)互相关:
from numpy.fft import fft, ifft
def periodic_corr(x, y):
"""Periodic correlation, implemented using the FFT.
x and y must be real sequences with the same length.
"""
return ifft(fft(x) * fft(y).conj()).real
如果你不介意np.hstack((y[1:], y))
产生的开销,你也可以使用np.correlate
来实现它:
import numpy as np
def periodic_corr_np(x, y):
"""Periodic correlation, implemented using np.correlate.
x and y must be real sequences with the same length.
"""
return np.correlate(x, np.hstack((y[1:], y)), mode='valid')
答案 1 :(得分:2)
from numpy import roll, correlate
x = [1,2,3,4]
roll(x, 1) #[4,1,2,3]
roll(x, 2) #[3,4,1,2]
roll(x, 3) #[2,3,4,1]
要将x与循环移位k的x相关联,您可以
k = 2
correlate(x, roll(x,k))