gewichteter gleitender Durchschnitt mit numpy.convolve

Ich schreibe eine Moving Average-Funktion, die die Convolve-Funktion in Numpy verwendet, was äquivalent zu a sein sollte (gewichteter gleitender Durchschnitt). Wenn meine Gewichte alle gleich sind (wie in einem einfachen arithmischen Durchschnitt), funktioniert es gut:

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

gibt

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

Wenn ich jedoch versuche, einen gewichteten Durchschnitt zu verwenden

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

Anstelle der (für die gleichen Daten) 3.667.4.667.5.667.667, ... erwarte ich, bekomme ich

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

Wenn ich das "Gültig" -Flag entferne, werden nicht einmal die korrekten Werte angezeigt. Ich möchte Convolve sowohl für die WMA als auch für die MA verwenden, da der Code dadurch sauberer wird (gleicher Code, unterschiedliche Gewichte), und ansonsten denke ich, ich muss alle Daten durchlaufen und Slices nehmen.

Irgendwelche Ideen zu diesem Verhalten?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage