Python:对XCORR的解释

Python:对XCORR的解释,python,numpy,correlation,Python,Numpy,Correlation,我有一个关于Python的问题。假设我执行以下操作: output=plt.xcorr(x,y, maxlags=4) 哪个时间序列是滞后的?输出将是时间t=-4到+4时x和y之间的互相关。那么,输出是否指x和y之间的互相关,如下所示: 或者它是x和y之间的倒数? 我试图深入研究xcorr的代码以获得更好的想法(请参阅),但我有点不知所措。。。np.相关(x,y,模式=2)。mode=2意味着什么?我只看到模式是=有效,完整,或相同 模式参数确定边界附近发生的情况。如果有长度为x和y(x>y

我有一个关于Python的问题。假设我执行以下操作:

output=plt.xcorr(x,y, maxlags=4)
哪个时间序列是滞后的?输出将是时间t=-4到+4时x和y之间的互相关。那么,输出是否指x和y之间的互相关,如下所示:

或者它是x和y之间的倒数?
我试图深入研究xcorr的代码以获得更好的想法(请参阅),但我有点不知所措。。。np.相关(x,y,模式=2)。mode=2意味着什么?我只看到模式是=
有效
完整
,或
相同

模式参数确定边界附近发生的情况。如果有长度为x和y(x>y)的输入向量:

  • valid
    /0:您将只接收两个信号重叠的卷积部分(x-y+1点)
  • 相同
    /1:输出向量的长度与较长输入向量的长度相同(x点)
  • full
    /2:信号(x+y-1点)之间甚至有一个重叠样本的区域的所有数据
这些模式的编号不是很公开,可以在
numpy
的源代码中找到。在任何情况下,
xcorr
都使用
full
模式。(实际上,在为
corvalve
correlate
指定模式时,只有模式名称的首字母起作用)

关于这些函数的真正作用,存在一些混淆
numpy.correlate
有两种不同的行为,具体取决于
numpy
版本。内部称为
multiarray.correlate
(旧)和
multiarray.correlate2
(新)
numpy.convalve
反转第二个输入向量,然后使用
multiarray.correlate
(即不推荐用于相关的向量)

所以,如果你真的想确定的话,你可以测试发生了什么。基本函数是两个向量之间的乘积,其中向量一次移动一个位置。为了澄清这一点,我将使用一些带有两个向量的数值示例

a <= [1,2,3,4,5]
b <= [10,20]
这是因为:

    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
时,卷积会给出相同的结果,在这种情况下,相关会给出相反的结果。使用复数
关联
在上述计算之前共轭第二个向量


回到
matplotlib
xcorr
图形。它接收两个长度相等的向量
x
y
,并计算这些向量在不同滞后时间的互相关

它首先使用
numpy计算完整卷积。如上所示,在
x
y
之间关联
。然后,它从位置
-maxlags
处的完整输出向量中提取相关结果。
maxlags
。规则是第二个输入向量移位。在最左边的图形位置,第二个向量
y
位于其最左边的位置(即从
x
向左移动)

检查这一点的最简单方法可能是:

xcorr([1.,2.,3.,4.,5.], [0,0,0,0,1.], normed=False, maxlags=4)

很好,现在我理解了Python中的模式,但是我应该如何解释交叉自相关输出?哪个时间序列是滞后的?
xcorr([1.,2.,3.,4.,5.], [0,0,0,0,1.], normed=False, maxlags=4)