如果您只想要一个简单的非加权移动平均线,您可以轻松地实现它np.cumsum
,可能是is比基于 FFT 的方法更快:
EDIT更正了 Bean 在代码中发现的一个相差一错误的索引。EDIT
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 已经因为专门的功能而有点臃肿了。