J'écris une fonction de moyenne mobile qui utilise la fonction convolve en numpy, ce qui devrait être équivalent à un (weighted moving average). Quand mes poids sont tous égaux (comme dans une simple moyenne arithmatic), il fonctionne très bien:moyenne mobile pondérée avec numpy.convolve
data = numpy.arange(1,11)
numdays = 5
w = [1.0/numdays]*numdays
numpy.convolve(data,w,'valid')
donne
array([ 3., 4., 5., 6., 7., 8.])
Cependant, lorsque je tente d'utiliser une moyenne pondérée
w = numpy.cumsum(numpy.ones(numdays,dtype=float),axis=0); w = w/numpy.sum(w)
au lieu de (pour les mêmes données) 3.667,4.667,5.667,6.667, ... je m'attends, je reçois
array([ 2.33333333, 3.33333333, 4.33333333, 5.33333333, 6.33333333,
7.33333333])
Si je supprime le drapeau 'valide', je ne vois même pas les bonnes valeurs. Je voudrais vraiment utiliser convolve pour le WMA ainsi que MA car il rend le code plus propre (même code, poids différents) et sinon je pense que je vais devoir parcourir toutes les données et prendre des tranches.
Des idées à propos de ce problème?
merci je vois. Et je ne savais pas non plus que [:: - 1] inverserait un tableau/une liste. C'est une information extrêmement utile! –
Comme un simple commentaire, 'np.cumsum (np.ones (numdays, dtype = float), axe = 0)' est une façon très complexe d'obtenir 'np.arange (numdays) + 1. ou' np.np .arange (1., numdays + 1.) '. –