首页 > 解决方案 > numpy.correlate 是否与 scipy.signal.correlate 不同,如果两者都用于一维数组?

问题描述

scipy 的相关函数的文档声称它可以用于 N 维数组

scipy.signal.correlate(in1, in2, mode='full', method='auto')

互相关两个 N 维数组。互相关 in1 和 in2,输出大小由 mode 参数确定。

虽然 numpy 的相关只能用于一维序列。

numpy.correlate(a, v, mode='valid')

两个一维序列的互相关。此函数计算信号处理文本中通常定义的相关性:

c_{av}[k] = sum_n a[n+k] * conj(v[n])

a 和 v 序列在必要时补零,而 conj 是共轭。

那么,如果两者都用于两个一维数组,这些函数会有所不同吗?如果不是,numpy.correlate 的用例是什么?

标签: pythonnumpyscipycorrelation

解决方案


scipy 实现在某些情况下会调用 numpy 版本,但在可能更快时也会使用更快的基于 FFT 的实现。有关详细信息,请参阅choose_conv_method来源

这种“重复”是为了让 numpy 可以提供优化的功能基础,通常由 scipy 扩展以提供更完整的功能覆盖(通常不太优化,但仍然主要是本机代码,非常快且数值稳定)。这种明显重复的其他示例是线性代数功能(linalg包)和傅立叶变换(其中 numpy 提供了一些有限的功能,而 scipy 导出了大部分fftpack


推荐阅读