加权移动平均线与numpy.convolve

Dr.*_*rew 12 python math numpy

我正在写一个移动平均函数,它使用numpy中的convolve函数,它应该等于a(加权移动平均值).当我的权重都相等时(如简单的算术平均值),它可以正常工作:

data = numpy.arange(1,11)
numdays = 5
w = [1.0/numdays]*numdays
numpy.convolve(data,w,'valid')
Run Code Online (Sandbox Code Playgroud)

array([ 3.,  4.,  5.,  6.,  7.,  8.])
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用加权平均值时

w = numpy.cumsum(numpy.ones(numdays,dtype=float),axis=0); w = w/numpy.sum(w)
Run Code Online (Sandbox Code Playgroud)

而不是(对于相同的数据)3.667,4.667,5.667,6.667,...我希望,我得到

array([ 2.33333333,  3.33333333,  4.33333333,  5.33333333,  6.33333333,
        7.33333333])
Run Code Online (Sandbox Code Playgroud)

如果我删除'有效'标志,我甚至看不到正确的值.我真的想使用卷积为WMA和MA,因为它使代码更清晰(相同的代码,不同的权重),否则我认为我将不得不遍历所有数据并采取切片.

关于这种行为的任何想法?

seb*_*erg 15

你想要的是np.correlate在卷积中,第二个参数基本上是倒置的,所以你的预期结果将是np.convolve(data, w[::-1], 'valid').

  • 仅作为评论,`np.cumsum(np.ones(numdays,dtype=float),axis=0)` 是一种非常复杂的获取 `np.arange(numdays)+1.` 或 `np.np 的方法。 arange(1., numdays+1.)`。 (2认同)