似乎没有函数可以简单地计算 numpy/scipy 上的移动平均值,导致 convoluted solutions .
我的问题有两个:
- 使用 numpy (正确)实现移动平均线的最简单方法是什么?
- 既然这看起来很重要且容易出错,那么是否有充分的理由不使用 batteries included在这种情况下?
最佳答案
如果您只想要一个简单的非加权移动平均线,您可以使用 np.cumsum
轻松实现它,可能是 是比基于 FFT 的方法更快:
编辑更正了 Bean 在代码中发现的错误索引。 编辑
def moving_average(a, n=3) :
ret = np.cumsum(a, dtype=float)
ret[n:] = ret[n:] - ret[:-n]
return ret[n - 1:] / n
>>> a = np.arange(20)
>>> moving_average(a)
array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10., 11.,
12., 13., 14., 15., 16., 17., 18.])
>>> moving_average(a, n=4)
array([ 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5,
10.5, 11.5, 12.5, 13.5, 14.5, 15.5, 16.5, 17.5])
所以我猜答案是:它真的很容易实现,也许 numpy 已经有点臃肿了,有专门的功能。
关于python - 如何使用 python + NumPy/SciPy 计算滚动/移动平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14313510/