用Python计算自相关函数

用Python计算自相关函数,python,numpy,runtime-error,correlation,Python,Numpy,Runtime Error,Correlation,我要做的就是计算数组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=

我要做的就是计算数组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()

我哪里出错了?

看来你有一个被零除的数字。它是这样工作的:

1) 在linspace(0,Mt-1,Mt)中n的
行中:
您有
n==Mt-1

2) 因此,在下一行
ac=Hcacf(n+1)
中调用函数
Hcacf(Mt)

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

要解决此问题,可以在第一行中排除间隔的端点。尝试用以下行替换它:

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

我对相关性完全陌生。我可以用更简单的方法吗?不客气。对于未来:没有零检查的除法是非常危险的。例如,在本例中,如果Mt==n,最好在函数的最开始处添加
,返回0
for n in linspace(0, Mt-1, num=Mt, endpoint=False):