使用Python进行不同班次的自相关函数

时间:2018-06-16 13:28:15

标签: python-3.x numpy

您好,我正在尝试获取不同班次的自相关列表。我的代码如下

thetas = np.array([0.24233997, 0.33467202, 0.35020237, ...])

autocorrelation = []
for shift in range(1,21):
    correlation = np.corrcoef(thetas[:-shift], thetas[shift:])[0,1]
    autocorrelation.append(correlation)

这给了我一个大错误

C:\Users\PC\Anaconda3\lib\site-packages\numpy\lib\function_base.py:3175: RuntimeWarning: Degrees of freedom <= 0 for slice
c = cov(x, y, rowvar)
C:\Users\PC\Anaconda3\lib\site-packages\numpy\lib\function_base.py:3109: RuntimeWarning: divide by zero encountered in double_scalars
c *= 1. / np.float64(fact)
C:\Users\PC\Anaconda3\lib\site-packages\numpy\lib\function_base.py:3109: RuntimeWarning: invalid value encountered in multiply
c *= 1. / np.float64(fact)
C:\Users\PC\Anaconda3\lib\site-packages\numpy\lib\function_base.py:1128: RuntimeWarning: Mean of empty slice.
avg = a.mean(axis)
C:\Users\PC\Anaconda3\lib\site-packages\numpy\core\_methods.py:73: RuntimeWarning: invalid value encountered in true_divide
ret, rcount, out=ret, casting='unsafe', subok=False)

有没有人知道如何修复此代码或其他方式来创建许多不同班次的自相关列表?提前谢谢。

1 个答案:

答案 0 :(得分:1)

发生此错误是因为python对超出数组范围的索引进行了切片,因此返回了一个空切片,np.corrcoef返回错误。

即,thetas的大小小于22。

这应该可以解决错误:

...
for shift in range(1,thetas.size-1):
...