2017-10-16 5 views
1

J'essaie de calculer une moyenne mobile d'une liste appelée 'temp_data' dans la fonction ci-dessous. Les données de moyenne mobile doivent être stockées dans une liste appelée «moving_average». Le code ci-dessous fonctionne dans le sens où la liste 'temp_mov' est imprimée dans la fonction (ligne 12), mais pas quand j'appelle la fonction plus tard (dans la dernière ligne du code). Dans ce cas, je reçois une liste vide. Quelle erreur est-ce que je fais?Comment faire une fonction qui calcule la moyenne mobile d'une liste?

# calculate moving average of a list of weather data 

    def make_moving(temps, temp_mov): 
      ''' Create moving average from list weather data''' 

      cumsum, temp_mov = [0], [] 
      for i, x in enumerate(temps, 1): 
        cumsum.append(cumsum[i-1] + x) 
        if i>=N: 
          moving_ave = round((cumsum[i] - cumsum[i-N])/N, 1) 
          temp_mov.append(moving_ave) 
      print(temp_mov) 
      return temp_mov 

    make_moving(temp_data, moving_average) 
    print(moving_average) 

Répondre

0

Vous affectez une nouvelle liste à temp_mov ici:

cumsum, temp_mov = [0], [] 

Par conséquent, moving_average n'est pas mis à jour lors temp_mov changements.

La modification make_moving(temp_data, moving_average) à moving_average = make_moving(temp_data) et la suppression du paramètre temp_mov résoudront le problème.