解释(和比较)numpy.correlate的输出

Roc*_*e28 5 python matlab numpy cross-correlation

我看过这个问题,但它并没有给我任何答案.

基本上,我如何确定是否存在强相关np.correlate?我期望得到与matlab相同的输出,我可以理解xcorrcoeff选项(1是滞后的强相关,l0是滞后没有相关l),但np.correlate产生大于1的值,即使输入向量已经归一化0和1.

示例输入

import numpy as np
x = np.random.rand(10)
y = np.random.rand(10)

np.correlate(x, y, 'full')
Run Code Online (Sandbox Code Playgroud)

这给出了以下输出:

array([ 0.15711279,  0.24562736,  0.48078652,  0.69477838,  1.07376669,
    1.28020871,  1.39717118,  1.78545567,  1.85084435,  1.89776181,
    1.92940874,  2.05102884,  1.35671247,  1.54329503,  0.8892999 ,
    0.67574802,  0.90464743,  0.20475408,  0.33001517])
Run Code Online (Sandbox Code Playgroud)

如果我不知道最大可能的相关值是什么,我怎么能分辨出什么是强相关性以及什么是弱相关?

另一个例子:

In [10]: x = [0,1,2,1,0,0]

In [11]: y = [0,0,1,2,1,0]

In [12]: np.correlate(x, y, 'full')
Out[12]: array([0, 0, 1, 4, 6, 4, 1, 0, 0, 0, 0])
Run Code Online (Sandbox Code Playgroud)

编辑:这是一个问题很严重的问题,但明确的答案确实回答了问题.我认为重要的是要注意我在这个区域挖掘时发现的东西,你无法比较互相关的输出.换句话说,它不会是有效使用输出来自互相关说信号X是更好的相关性的信号ý比信号ž.互相关不提供这种信息

Joh*_*024 9

numpy.correlate -documented.不过,我认为我们可以理解它.让我们从您的示例案例开始:

>>> import numpy as np
>>> x = [0,1,2,1,0,0]
>>> y = [0,0,1,2,1,0]
>>> np.correlate(x, y, 'full')
array([0, 0, 1, 4, 6, 4, 1, 0, 0, 0, 0])
Run Code Online (Sandbox Code Playgroud)

这些数字是每个可能滞后的互相关.为了更清楚,让我们把滞后数放在相关性之上:

>>> np.concatenate((np.arange(-5, 6)[None,...], np.correlate(x, y, 'full')[None,...]), axis=0)
array([[-5, -4, -3, -2, -1,  0,  1,  2,  3,  4,  5],
       [ 0,  0,  1,  4,  6,  4,  1,  0,  0,  0,  0]])
Run Code Online (Sandbox Code Playgroud)

在这里,我们可以看到互相关在滞后-1处达到峰值.如果你看一下x,并y以上,这是有道理的:它一个转变y到一个地方离开,它匹配x准确.

为了验证这一点,让我们再试一次,这次y进一步转移:

>>> y = [0, 0, 0, 0, 1, 2]
>>> np.concatenate((np.arange(-5, 6)[None,...], np.correlate(x, y, 'full')[None,...]), axis=0)
array([[-5, -4, -3, -2, -1,  0,  1,  2,  3,  4,  5],
       [ 0,  2,  5,  4,  1,  0,  0,  0,  0,  0,  0]])
Run Code Online (Sandbox Code Playgroud)

现在,相关性在-3的滞后处达到峰值,这意味着当向左移动3个位置时,x和之间的最佳匹配y发生y.

  • 为此,您需要一个[_normalized_ cross-correlation](https://en.wikipedia.org/wiki/Cross-correlation#Normalized_cross-correlation)。有一个[提议的补丁](https://github.com/numpy/numpy/issues/2310) 可以将其添加到 numpy 但该补丁尚未生效。 (2认同)