2017-01-22 4 views
-1
hndl_nc['name_variable'][:, :, :, var] 

Ich öffne eine netCDF-Datei mit Xarray und möchte auf eine Schicht wie oben angegeben zugreifen. Die Form der netCDF-Datei ist (25 * 360 * 720 * 5).Zugriff auf netCDF Variable Wert mit Xarray

Gibt es eine Möglichkeit zum Neuschreiben hndl_nc['name_variable'][:, :, :, var], so dass ich :, :, :, var nicht angeben muss? Ich möchte den Variablenzugriff möglichst unabhängig von der Struktur von netCDF machen.

Basierend auf this answer, möchte ich auch die Lsg bei hndl_nc['name_variable'][:, :, :, var]

+1

Wie ist Ihr ** - EDIT ** anders als das, was Sie am Anfang erwähnt haben, nämlich 'hndl_nc ['name_variable'] [:,:,:, var]'? – fedepad

Antwort

1

Da Sie verwenden xarray (xarray), I Stellen Sie sich vor, Sie machen etwas wie das Folgende:

import xarray as xr 
ds = xr.open_dataset(path_file) 

Sie haben ein paar Optionen entsprechend der Dokumentation (http://xarray.pydata.org/en/stable/indexing.html):

  1. Dimension Lookup nach Name, Index-Lookup durch integer
  2. Dimension Lookup nach Name, Index-Suche nach Label

Dimension Nachschlag nach Name, Index-Lookup durch integer

Um Index eine ganze Zahl verwenden Sie können

ds['new_var'] = ds.isel(var=0) 

oder

ds['new_var'] = ds[dict(var=0)] 

Ich bin einer der Dimension angenommen wird var genannt. Der Einfachheit halber habe ich einfach das erste Element in var gewählt, also passen Sie es an Ihre Bedürfnisse an. Sie können einen Wert auswählen oder ein Segment für var auswählen. Bitte sehen Sie mehr in der Dokumentation, die ich oben verlinkt habe.

Dimension Lookup nach Namen, Index-Suche nach Label
Um in einer der Dimensionen zu sehen ein Etikett verwendet wird, könnte man tun:

ds['new_var'] = ds.sel(var='IA') 

oder

ds['new_var'] = ds.loc[dict(var='IA')] 

Ich bin Ich bin mir nicht sicher, ob es zu deinem Fall passt oder nach dem, wonach du suchst, denn ich konnte deinen Fall nicht gut verstehen.

1

Die Auslassungs arbeiten ... funktionieren sollte:

hndl_nc['name_variable'][..., var] 
+0

danke @Mike, ich hätte klarer sein sollen. Die Ellipse funktioniert in diesem Fall nicht: ':, var,:,:'. Gibt es dafür eine Lösung? – user308827

+0

Sie werden die Änderung erhöhen, um eine gute Antwort zu erhalten, wenn Sie ein [minimales, vollständiges und überprüfbares Beispiel] veröffentlichen (http://stackoverflow.com/help/mcve). –

+0

Wie nicht: 'VisibleDeprecationWarning: ein Index kann nur eine einzige Ellipsis (...); Ersetzen Sie alle bis auf eine mit Slices (:). ' –

Verwandte Themen