用Python计算自相关函数
我要做的就是计算数组jx的自相关,我使用下面的公式 其中n是我希望计算自相关函数的时间,用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=
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):