1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

[Python] Weighted moving average with numpy.convolve

Discussão em 'Python' iniciado por Stack, Setembro 13, 2025.

  1. Stack

    Stack Membro Participativo

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

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


    It 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.

    What causes this behavior?

    Continue reading...

Compartilhe esta Página