我正在编写一个移动平均函数,该函数使用Numpy中的卷积函数,这应该等同于(加权移动平均)。当我的权重全部相等时(例如简单算术平均数),它可以正常工作:
data = numpy.arange(1,11)
numdays = 5
w = [1.0/numdays]*numdays
numpy.convolve(data,w,'valid')
提供
array([ 3., 4., 5., 6., 7., 8.])
但是,当我尝试使用加权平均时
w = numpy.cumsum(numpy.ones(numdays,dtype=float),axis=0); w = w/numpy.sum(w)
我期望得到的是 3.667、4.667、5.667、6.667......,但实际得到的却是
array([ 2.33333333, 3.33333333, 4.33333333, 5.33333333, 6.33333333,
7.33333333])
如果我移除了'valid'标志,我甚至看不到正确的值。 我真的很想像MA一样使用卷积进行WMA,因为这样可以使代码更加简洁(相同的代码,不同的权重),否则我认为我必须遍历所有数据并进行切片。关于这种行为有什么想法吗?
np.cumsum(np.ones(numdays,dtype=float),axis=0)
是一种非常复杂的方法来获取np.arange(numdays)+1.
或者np.np.arange(1., numdays+1.)
。 - Ramon Crehuet