简体   繁体   中英

weighted moving average with numpy.convolve

I'm writing a moving average function that uses the convolve function in numpy, which should be equivalent to a ( weighted moving average ). When my weights are all equal (as in a simple arithmatic average), it works fine:

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

gives

array([ 3.,  4.,  5.,  6.,  7.,  8.])

However, when I try to use a weighted average

w = numpy.cumsum(numpy.ones(numdays,dtype=float),axis=0); w = w/numpy.sum(w)

instead of the (for the same data) 3.667,4.667,5.667,6.667,... I expect, I get

array([ 2.33333333,  3.33333333,  4.33333333,  5.33333333,  6.33333333,
        7.33333333])

If I remove the 'valid' flag, I don't even see the correct values. I would really like to use convolve for the WMA as well as MA as it makes the code cleaner (same code, different weights) and otherwise I think I'll have to loop through all the data and take slices.

Any ideas about this behavior?

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM