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

标签 python matlab numpy cross-correlation

我看过 this question,但它并没有真正给我任何答案。

本质上,我如何使用 np.correlate 确定是否存在强相关性?我期望使用我能理解的 coeff 选项从 matlab 的 xcorr 获得相同的输出(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 是无效的>。互相关不提供这种信息

最佳答案

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 位。

关于python - 解释(和比较)numpy.correlate 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37093382/

相关文章:

python - 在 sympy 中,定义 kets 上算子的已知 Action 并用它来简化

python - 在 opencv 中检测嵌套形状

c++ - 在 COM 服务器函数中为 int 参数传递 bool 值

python - 将 3d sigmoid 拟合到数据

python-3.x - 分割掩码的反转像素坐标

Python:如何用一系列数字填充数组?

python - 如何查找这个词典文件呢?

user-interface - 如何将所有绘图菜单(文件、编辑、插入等)集成到 matlab GUI 中?

python - 导入错误 : : Symbol not found: __PyErr_ReplaceException

python - 在python中创建数组X,其中包含数组Y中每个元素的一定数量的副本