我有一个关于python中xcorr的问题。假设我执行以下操作:
output=plt.xcorr(x,y, maxlags=4)
哪个时间序列滞后?输出将是在时间t=4到+4之间x和y之间的互相关。输出是指X和Y之间的互相关吗?以下内容:
或者是X和Y之间的反方向?
我试图深入研究xcorr的代码以获得更好的想法(参见here),但我有点迷失了……相关(x,y,模式=2)。模式=2是什么意思?我只看到here模式是=
valid
、full
或same
。 最佳答案
mode
参数决定边界附近发生的情况。如果有长度为x和y(x>y)的输入向量:valid
/0:您将只接收两个信号重叠(x-y+1点)的卷积部分。same
/1:输出向量的长度与较长的输入向量(x点)的长度相同。full
/2:信号之间存在重叠的区域的所有数据(x+y-1点)
这些模式的数字不是很公开定义的,但是可以在numpy
的源代码中找到。无论如何xcorr
使用full
模式。(实际上,在为convolve
或correlate
指定模式时,只有模式名称的第一个字母才重要)
关于这些函数的真正作用,人们有些困惑。numpy.correlate
根据numpy
版本有两种不同的行为。内部称为multiarray.correlate
(旧)和multiarray.correlate2
(新)。numpy.convolve
反转第二个输入向量,然后使用multiarray.correlate
(即不推荐用于关联的向量)。
所以,如果你真的想确定,你要测试发生了什么。基本函数是两个向量之间的乘积,其中向量一次移动一个位置。为了澄清这一点,我将使用一些带有两个向量的数值示例。
a <= [1,2,3,4,5]
b <= [10,20]
我们先来看看卷积:
numpy.convolve(a,b,mode='full') => [ 10, 40, 70, 100, 230, 100]
这是因为:
1 2 3 4 5 => 1 x 10 = 10
20 10
1 2 3 4 5 => 1 x 20 + 2 x 10 = 40
20 10
...
1 2 3 4 5 => 5 x 20 = 100
20 10
不同的模式返回相同的数据,但在每个末端截断。
相关性:
numpy.correlate(a,b,mode='full') => [ 20, 50, 80, 110, 140, 50]
1 2 3 4 5 => 1 x 20 = 20
10 20
1 2 3 4 5 => 1 x 10 + 2 x 20 = 50
10 20
...
1 2 3 4 5 => 5 x 10 = 100
10 20
基本上,与实数的唯一区别是其中一个向量是镜像的。这有一定的后果,如卷积给出了相同的结果,如果
a
和b
被交换,相关给出了相反的结果。复数correlate
使第二个向量在上述计算之前共轭。回到
matplotlib
的xcorr
图表。它接收两个向量“cc>和x
等长度,并计算这些向量在不同滞后下的互相关。它首先计算
y
在numpy.correlate
和x
之间的全卷积,如上图所示。然后从y
位置的完整输出向量中绘制相关结果。规则是第二个输入向量移位。在最左边的图形位置,第二个向量-maxlags
位于最左边的位置(即从maxlags
向左移动)。最简单的检查方法可能是:
xcorr([1.,2.,3.,4.,5.], [0,0,0,0,1.], normed=False, maxlags=4)