numpy.correlate #

麻木的。关联( a , v , mode = 'valid' ) [来源] #

两个一维序列的互相关。

该函数计算信号处理文本中通常定义的相关性:

\[c_k = \sum_n a_{n+k} \cdot \overline{v}_n\]

a 和 v 序列在必要时用零填充,并且 \(\overline x\)表示复共轭。

参数
a, v类似数组

输入序列。

模式{'有效', '相同', '完整'}, 可选

请参阅convolve文档字符串。请注意,默认值为“valid”,与convolve使用“full”不同。

old_behavior布尔值

old_behavior在 NumPy 1.10 中被删除。如果您需要旧的行为,请使用multiarray.correlate

返回
输出数组

av的离散互相关。

也可以看看

convolve

两个一维序列的离散线性卷积。

multiarray.correlate

旧的,无共轭,相关的版本。

scipy.signal.correlate

使用FFT,在大型阵列上具有优越的性能。

笔记

上述相关性的定义并不唯一,有时相关性可能有不同的定义。另一个常见的定义是:

\[c'_k = \sum_n a_{n} \cdot \overline{v_{n+k}}\]

这与\(c_k\)经过\(c'_k = c_{-k}\)

numpy.correlate在大型数组(即 n = 1e5)中可能执行缓慢,因为它不使用 FFT 来计算卷积;在这种情况下,scipy.signal.correlate可能会更好。

例子

>>> np.correlate([1, 2, 3], [0, 1, 0.5])
array([3.5])
>>> np.correlate([1, 2, 3], [0, 1, 0.5], "same")
array([2. ,  3.5,  3. ])
>>> np.correlate([1, 2, 3], [0, 1, 0.5], "full")
array([0.5,  2. ,  3.5,  3. ,  0. ])

使用复杂序列:

>>> np.correlate([1+1j, 2, 3-1j], [0, 1, 0.5j], 'full')
array([ 0.5-0.5j,  1.0+0.j ,  1.5-1.5j,  3.0-1.j ,  0.0+0.j ])

请注意,您会得到时间反转的复共轭结果 (\(\overline{c_{-k}}\)) 当两个输入序列 a 和 v 交换位置时:

>>> np.correlate([0, 1, 0.5j], [1+1j, 2, 3-1j], 'full')
array([ 0.0+0.j ,  3.0+1.j ,  1.5+1.5j,  1.0+0.j ,  0.5+0.5j])