Je pensais que si je mettais une variable pour garder l'historique globalement, la portée s'élargirait et je ne l'aimerais pas, mais si j'utilise une fermeture, je peux la cacher. Ceci est mon propre mémo.
import numpy as np
def get_lpf(alpha):
prev = np.nan * np.ones(1)
calc = lambda pre, new : alpha * prev + (1.-alpha) * new
def lpf(val):
prev[0] = calc(prev[0], val) if not np.isnan(prev[0]) else val
return prev[0]
return lpf
lpf = get_lpf(0.8)
for i in range(100):
new = numpy.random.normal()
filtered = lpf(new)
print("new=%f, filt=%f" % (new, filtered) )
prev = np.nan * np.ones(1)
calc = lambda pre, new : alpha * prev + (1.-alpha) * new
--Créer un historique contenant la variable prev dans la fonction de génération lpf get_lpf
--calc est une fonction qui effectue le calcul LPF $ y_n = \ alpha y_ {n-1} + (1- \ alpha) x_n $
prev[0] = calc(prev[0], val) if not np.isnan(prev[0]) else val
--Si vous définissez prev =, il sera reconnu comme nouvellement défini au lieu de faire référence à la variable externe, et une erreur se produira.
prev est initialisé avec numpy.nan, il est affiché tel quel jusqu'à ce qu'il ne soit plus numpy.nan.