您正在寻找归一化互相关。该选项在Numpy中尚不可用,但是正在等待符合您所需的补丁程序正在等待审核。我认为应该很容易应用它。大多数补丁只是文档字符串。它添加的唯一代码行是
if normalize: a = (a - mean(a)) / (std(a) * len(a)) v = (v - mean(v)) / std(v)
其中a和v是要查找互相关的输入numpy数组。不难将它们添加到您自己的Numpy发行版中,或者只是复制相关函数并在其中添加行。如果我选择走这条路线,我会亲自去做。
另一种可能更好的替代方法是,在将输入向量发送给相关函数之前,先对其进行归一化处理。由您决定要采用哪种方式。
顺便说一句,按照Wikipedia关于互相关的页面,这似乎是正确的规范化,除了用除
len(a)而不是
(len(a)-1)。我觉得差异类似于样品的标准偏差与样品的标准偏差,在我看来并没有太大的区别。