Escribo una función de promedio móvil que usa la función convolve en numpy, que debe ser equivalente a a (weighted moving average). Cuando mis pesos son todos iguales (como en una simple media aritmética), que funciona bien:media móvil ponderada con numpy.convolve
data = numpy.arange(1,11)
numdays = 5
w = [1.0/numdays]*numdays
numpy.convolve(data,w,'valid')
da
array([ 3., 4., 5., 6., 7., 8.])
Sin embargo, cuando intento utilizar una media ponderada
w = numpy.cumsum(numpy.ones(numdays,dtype=float),axis=0); w = w/numpy.sum(w)
en lugar de (para los mismos datos) 3.667,4.667,5.667,6.667, ... espero, obtengo
array([ 2.33333333, 3.33333333, 4.33333333, 5.33333333, 6.33333333,
7.33333333])
Si elimino el indicador "válido", ni siquiera veo los valores correctos. Realmente me gustaría usar convolve para WMA y MA, ya que hace que el código sea más limpio (mismo código, diferentes pesos) y, de lo contrario, creo que tendré que recorrer todos los datos y tomar secciones.
¿Tiene alguna opinión sobre este comportamiento?
gracias, ya veo. Y tampoco sabía que [:: - 1] invertirá una matriz/lista. ¡Esa es información extremadamente útil! –
Como un simple comentario, 'np.cumsum (np.ones (numdays, dtype = float), axis = 0)' es una forma muy compleja de obtener 'np.arange (numdays) + 1.' o' np.np .arange (1., numdays + 1.) '. –