在Numpy的一维数组滚动窗口?

有没有办法在Numpy中有效地实现一维数组的滚动窗口?

例如,我有这个纯Python代码片段来计算1D列表的滚动标准偏差,其中observations是一维值列表, n是标准偏差的窗口长度:

 stdev = [] for i, data in enumerate(observations[n-1:]): strip = observations[i:i+n] mean = sum(strip) / n stdev.append(sqrt(250*sum([(s-mean)**2 for s in strip])/(n-1))) 

有没有一种方法可以在Numpy中完成这个任务,也就是说,没有任何Python循环? numpy.std的标准偏差是微不足道的,但滚动窗口部分完全numpy.std

我在Numpy上发现了一篇有关滚动窗口的博客文章,但似乎并不适用于一维数组。

只需使用博客代码,但将您的function应用于结果。

 numpy.std(rolling_window(observations, n), 1) 

你在哪里(从博客):

 def rolling_window(a, window): shape = a.shape[:-1] + (a.shape[-1] - window + 1, window) strides = a.strides + (a.strides[-1],) return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)