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
.