从函数

时间:2017-01-21 12:09:08

标签: python-3.x numpy

我有这样的功能

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返回单个值。

1 个答案:

答案 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