我需要对一组数字进行自相关,据我了解,这只是该组与自身的相关性。
我已经使用 numpy 的相关函数进行了尝试,但我不相信结果,因为它几乎总是给出第一个数字 不是 最大的向量,而它应该是最大的。
所以,这个问题实际上是两个问题:
numpy.correlate
究竟在做什么?- 我如何使用它(或其他东西)进行自相关?
原文由 Ben 发布,翻译遵循 CC BY-SA 4.0 许可协议
我需要对一组数字进行自相关,据我了解,这只是该组与自身的相关性。
我已经使用 numpy 的相关函数进行了尝试,但我不相信结果,因为它几乎总是给出第一个数字 不是 最大的向量,而它应该是最大的。
所以,这个问题实际上是两个问题:
numpy.correlate
究竟在做什么?原文由 Ben 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答924 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
要回答您的第一个问题,
numpy.correlate(a, v, mode)
正在执行 --- 与a
的反向v
并给出按指定模式裁剪的结果。 卷积的定义,C(t)=∑ -∞ < i < ∞ a i v t+i其中 -∞ < t < ∞,允许从 -∞ 到 ∞ 的结果,但是你显然不能存储无限长的大批。所以它必须被裁剪,这就是模式的来源。有 3 种不同的模式:完整、相同和有效:t
的结果,其中a
和v
有一些重叠。a
或v
)。a
和v
完全重叠时返回结果。numpy.convolve
的 文档 提供了有关模式的更多详细信息。对于你的第二个问题,我认为
numpy.correlate
给了你自相关,它 也 给了你更多一点。自相关用于查找信号或函数在特定时间差下与其自身的相似程度。在时间差为 0 时,自相关应该是最高的,因为信号与其自身相同,因此您预计自相关结果数组中的第一个元素将是最大的。但是,相关性并非从 0 的时间差开始。它从负时间差开始,接近 0,然后变为正。也就是说,您期望:自相关 (a) = ∑ -∞ < i < ∞ a i v t+i其中 0 <= t < ∞
但是你得到的是:
自相关 (a) = ∑ -∞ < i < ∞ a i v t+i其中 -∞ < t < ∞
您需要做的是获取相关结果的后半部分,这应该是您正在寻找的自相关。一个简单的 python 函数可以做到这一点:
当然,您需要进行错误检查以确保
x
实际上是一维数组。此外,这种解释可能不是最严格的数学解释。我一直在抛出无穷大,因为卷积的定义使用了它们,但这不一定适用于自相关。所以,这个解释的理论部分可能有点靠不住,但希望实际结果能有所帮助。 这些 关于自相关的 页面 非常有用,如果您不介意在符号和沉重的概念中费力的话,它们可以为您提供更好的理论背景。