解读(和比较)numpy.correlate的输出结果

7
我看过这个问题,但它没有给我任何答案。
本质上,我如何使用np.correlate确定是否存在强相关性?我期望得到与matlab的xcorr相同的输出,使用coeff选项可以理解(1是在滞后l处的强相关性,0是在滞后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')

这将产生以下输出:
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])

如果我不知道最大可能的相关性价值是多少,我如何判断哪些是强相关,哪些是弱相关?
另一个例子:
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])

编辑:这是一个问得不好的问题,但被标记的答案确实回答了所问的内容。我认为值得注意的是,在探索这个领域时发现,不能比较交叉相关的输出结果。换句话说,使用交叉相关的输出结果来说信号x与信号y比信号z更相关是无效的。交叉相关不提供这种信息。


根据我所了解的关于xcorr的内容,输出结果也没有被归一化到[0,1]。它似乎与numpy.correlate的行为完全相同。 - Jan Christoph Terasa
@ChristophTerasa 抱歉,我的意思是使用 coeff 选项的 xcorr。问题已经更正。 - JakeCowton
1个回答

14

numpy.correlate 的文档资料相对不足。然而,我认为我们可以理解它。接下来让我们从您的示例案例开始:

>>> 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])

那些数字是每个可能的滞后的交叉相关值。为了更清晰地表达,让我们将滞后数字放在相关性上方:

>>> 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]])

在这里,我们可以看到交叉相关性在滞后-1时达到峰值。如果您查看上面的xy,那么这就有道理了:如果将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]])

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


1
但是在第一个例子中最大相关性为6,在第二个例子中为5,那么我怎么知道它们是否是强相关的?我知道你可以说这是它们最相关的滞后点,我也知道6的相关性比5强,但是6的相关性强吗?5的相关性强吗? - JakeCowton
2
为此,您需要一个归一化交叉相关。有一个建议的补丁,可以将其添加到numpy中,但该补丁尚未得到处理。 - John1024

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接