[英]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()
但它还会返回以下错误消息:
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
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):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.