Plu*_*ug4 4 python numpy correlation
我在Python中有一个关于xcorr的问题.假设我执行以下操作:
output=plt.xcorr(x,y, maxlags=4)
Run Code Online (Sandbox Code Playgroud)
哪个时间序列滞后?输出将是在时间t = -4到+4 时x和y之间的互相关.那么输出是指x和y之间的互相关如下:
或者它是x和y之间的反转?我试图深入研究xcorr的代码以获得更好的想法(见这里),但我有点迷失... np.correlate(x,y,mode = 2).mode = 2是什么意思?我只看到这里选择的模式是= 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反转第二个输入向量并使用then multiarray.correlate(即不推荐用于相关的那个).
所以,如果你想要确定,你可以测试会发生什么.基本功能是两个向量之间的乘积,其中向量一次移动一个位置.为了澄清这一点,我将使用一些带有两个向量的数字示例.
a <= [1,2,3,4,5]
b <= [10,20]
Run Code Online (Sandbox Code Playgroud)
让我们先看看卷积:
numpy.convolve(a,b,mode='full') => [ 10, 40, 70, 100, 230, 100]
Run Code Online (Sandbox Code Playgroud)
这是因为:
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
Run Code Online (Sandbox Code Playgroud)
不同的模式返回相同的数据,但在每一端都被截断.
对于相关性:
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
Run Code Online (Sandbox Code Playgroud)
因此,基本上与实数的唯一区别在于其中一个向量是镜像的.这有一些后果,如卷积给出相同的结果,如果a和b被交换,相关性在这种情况下,给予逆转的结果.在correlate上面的计算之前,复数与第二矢量共轭.
返回matplotlib的xcorr图.它接收两个矢量x并y具有相等的长度,并计算这些矢量在不同滞后时的互相关.
它首先计算与所述全卷积numpy.correlate之间x和y如上所示.然后,它吸引了来自于位置的完整输出向量的相关结果-maxlags.. maxlags.规则是第二个输入向量被移位.在最左边的图形位置,第二个矢量y位于其最左侧位置(即从左侧移动x).
检查这个的最简单方法可能是:
xcorr([1.,2.,3.,4.,5.], [0,0,0,0,1.], normed=False, maxlags=4)
Run Code Online (Sandbox Code Playgroud)