我有这样的功能
def auto_correlation(dat, k):
s = np.mean(dat)
v = np.var(dat)
N = dat.size
sum = np.dot((dat[:N - k] - s), (dat[k:] - s))
return 1 / v / (N - k) * sum
并希望像这样创建一个列表
autocorrOfTimeSeries = [auto_correlation(time_series,k) for k in range(50001)]
我总是收到错误
ValueError: shapes (4999,) and (0,) not aligned: 4999 (dim 0) != 0 (dim 0)
虽然。时间序列只是1 d数组,auto_correlation返回单个值。
答案 0 :(得分:0)
错误可能是因为在某些时候切片[:N-k]
和[k:]
会返回不同的形状。
一个普遍的问题是,要使用矢量化(基于NumPy数组的)操作,您可能需要用0填充数据系列。您还可以查看NumPy相关函数https://docs.scipy.org/doc/numpy/reference/generated/numpy.correlate.html#numpy.correlate或SciPy基于FFT的相关函数https://docs.scipy.org/doc/scipy/reference/tutorial/signal.html#convolution-correlation