为了回答你的第一个问题,numpy.correlate(a,v,mode)执行卷积a与v的逆,并给出由指定的模式剪切的结果。 (7000,C(t)=Σ-∞< i< ∞aivt i其中-∞< t < ∞,允许从-∞到∞的结果,但是你显然不能存储一个无限长的数组。所以它必须被剪辑,这就是模式进来的地方。有3种不同的模式:full,same,&有效:
>“full”模式返回每个t的结果,其中a和v都有一些重叠。
>“same”模式返回与最短向量(a或v)长度相同的结果。
>“valid”模式仅在a和v完全相互重叠时返回结果。
documentation for numpy.convolve提供了有关模式的更多详细信息。
对于你的第二个问题,我认为numpy.correlate是给你自相关,它只是给你一点点。自相关用于找出信号或函数在某个时间差处与其自身的相似程度。在时间差为0时,自相关应该是最高的,因为信号与自身相同,因此您预期自相关结果数组中的第一个元素将是最大的。然而,相关性不是在时间差0处开始。它从负时间差开始,接近0,然后变为正。也就是说,你期待:
自相关(a)=Σ-∞< i< ∞aivt i其中0≤t< ∞ 但你得到的是: 自相关(a)=Σ-∞< i< ∞aivt i其中-∞< t < ∞ 你需要做的是获取相关结果的后半部分,这应该是你正在寻找的自相关。一个简单的python函数可以做到:
def autocorr(x):
result = numpy.correlate(x, x, mode='full')
return result[result.size/2:]
当然,你需要进行错误检查,以确保x实际上是一个1-d数组。此外,这种解释可能不是最数学上严格的。我一直在绕过无穷大,因为卷积的定义使用它们,但这不一定适用于自相关。因此,这种解释的理论部分可能稍微不合理,但希望实际结果是有帮助的。 These pages对自相关是非常有用的,如果你不介意通过符号和沉重的概念,可以给你一个更好的理论背景。