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

python - 使用Python计算自相关函数-LMLPHP

其中n是我希望计算自相关函数的时间,Mt是最大时间,tk是从1Mt-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()


它返回的输出是这样的:
python - 使用Python计算自相关函数-LMLPHP

但是它还会返回以下错误消息:

 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):

关于python - 使用Python计算自相关函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37042786/

10-12 04:32