2016-07-26 26 views
0

Ich zeichne pcolourmesh von Winddaten von Satelliten und von einem Wettermodell. Die Werte sind alle in einer netcdf-Datei gespeichert. Im Folgenden versuche ich, Werte gleich 70 oder 0 durch NaN zu ersetzen, dies ergibt keinen Fehler, aber es erzeugt auch keine NaNs, nozeros hat die gleiche Größe wie der ursprüngliche Datensatz. Ich habe an der Daten geschaut und es tut Werte == 70 und 0.Python netcdf - konvertiert die angegebenen Werte in 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)) 

Auch möchte ich Bereiche konvertieren, wo LandMask> = 0 in NaN, gibt es einen besseren Weg, dies zu tun?

Dank

Antwort

1

Es gibt mehrere Probleme in Ihrem Code, abgesehen von dem Einzug Syntaxfehler einstellen.

Der folgende Code wird nichts tun. Was ist i? Das Ergebnis wird nicht gespeichert.

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

Hier ist ein Beispiel, das tun sollte, was Sie wollen.

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

Danke für die Kommentare. Ich habe 'SARwind_nan = SARwind [:] .copy() 'gesetzt, da die Werte aus der netCDF-Datei stammen, scheint es zu funktionieren. –