用 Python 计算自相关函数

Calculating autocorrelation function with Python

我想做的就是计算数组 jx 的自相关,我正在使用以下公式,

其中 n 是我希望计算自相关函数的时间,Mt 是最大时间,tk 是从 1 到 运行 的时间步长Mt-n.

这是我写的代码。我正在用一个简单的数组 jx=linspace(1,10,20) 检查我的程序。我还让程序保存不同 n 的自相关值并用 n 绘制它们。

from numpy import *
from pylab import*

jx=linspace(1,10,20)

Mt=len(jx)

def Hcacf(n):
    Sum=0.0
    coeff1=0
    while coeff1 < (Mt-n) :
        Sum = Sum + jx[coeff1]*jx[coeff1+n]# + jy[coeff1]*jy[coeff1+n]
        coeff1=coeff1+1
    avg = Sum*1.0 / (Mt-n)
    return avg

autocorrelation=[]
for n in linspace(0,Mt-1,Mt):
    ac=Hcacf(n+1)
    autocorrelation.append(ac)

lag=linspace(0,Mt-1,Mt)
plot(lag,autocorrelation,marker='o')
show()

returns 的输出是这样的:

但它也returns以下错误消息:

 RuntimeWarning: invalid value encountered in double_scalars
     avg = Sum*1.0 / (Mt-n)

我哪里错了?

看来你被零除了。它是这样工作的:

1) 在行 for n in linspace(0,Mt-1,Mt): 中你有 n==Mt-1,

2) 所以,在下一行 ac=Hcacf(n+1) 你调用函数 Hcacf(Mt),

3) 但是在函数 Hcacf 中有一行 avg = Sum*1.0 / (Mt-n)。这是可以被零除的地方。

要修复它,您可以排除第一行中区间的端点。尝试用这一行替换它:

for n in linspace(0, Mt-1, num=Mt, endpoint=False):