2016-07-26 1 views
0

Je suis en train de tracer la couleur des données de vent des satellites et d'un modèle météorologique. Les valeurs sont toutes stockées dans un fichier netcdf. Ci-dessous, j'essaie de remplacer les valeurs égales à 70 ou à 0 par NaN, cela ne donne pas d'erreur mais ne crée pas de NaN non plus, nozeros a la même taille que l'ensemble de données original. Je l'ai regardé les données et elle a des valeurs == 70 et 0.Python netcdf - convertir les valeurs spécifiées en NaN

import netCDF4 as nc 
import numpy as np 
import matplotlib.pyplot as plt 
import csv as cs 
import pandas as pd 

ncfile = nc.Dataset('C:\Users\mmso2\Google Drive\ENVI_I-PAC_2007_10_21_21_22_47.nc') 
SARwind = ncfile.variables['sar_wind'] 
ModelWind = ncfile.variables['model_speed'] 
LON = ncfile.variables['longitude'] 
LAT = ncfile.variables['latitude'] 
LandMask = ncfile.variables['mask'] 

    #clean the data of values = 70 
    SARwind_nan = SARwind 

    for i in SARwind_nan: 
     if i.any() == 70: 
      i = np.nan 
     elif i.any()==0: 
      i = np.nan 

    nozeros=np.count_nonzero(~np.isnan(SARwind_nan)) 

, je veux également convertir les zones où LandMask> = 0 dans NaN, est-il une meilleure façon de le faire?

Merci

Répondre

1

Il y a plusieurs questions dans votre code, annulant les erreurs de syntaxe d'indentation.

Le code ci-dessous ne fera rien. Qu'est-ce que i? Le résultat n'est pas enregistré.

for i in SARwind_nan: 
     if i.any() == 70: 
      i = np.nan 
      ... 

Voici un exemple qui devrait faire ce que vous voulez.

SARwind = np.array([ 
    [1,2,0,-4,-5], 
    [6,0,70,-9,-15], 
    [10,11,-12,70,-14], 
    [0,17,70,-19,-20], 
    ], dtype=np.float32) 

SARwind_nan = SARwind.copy() 
SARwind_nan[SARwind_nan == 0.0] = np.nan 
SARwind_nan[SARwind_nan == 70.0] = np.nan 

print SARwind_nan 

nozeros=np.count_nonzero(~np.isnan(SARwind_nan)) 
print nozeros 
+0

Merci pour les commentaires. J'ai réglé 'SARwind_nan = SARwind [:]. Copy()' car les valeurs proviennent du fichier netCDF, cela semble fonctionner. –