用 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):
我想做的就是计算数组 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):