0

Ich habe eine netcdf-Datei, die multidimensionale Koordinaten verwendet. Mein xarray-Datensatz sieht wie folgt ausWie unterteilen Daten mit multidimensionalen Koordinaten mit Python-Xarray?

<xarray.Dataset> 
Dimensions:   (Time: 48, bottom_top: 50, bottom_top_stag: 51, 
soil_layers_stag: 4, south_north: 1015, south_north_stag: 1016, west_east: 1359, west_east_stag: 1360) 
Coordinates: 
XLAT    (Time, south_north, west_east) float32 18.1363 18.1456 ... 
XLAT_U   (Time, south_north, west_east_stag) float32 18.1316 ... 
XLAT_V   (Time, south_north_stag, west_east) float32 18.1198 ... 
XLONG    (Time, south_north, west_east) float32 -122.884 ... 
XLONG_U   (Time, south_north, west_east_stag) float32 -122.901 ... 
XLONG_V   (Time, south_north_stag, west_east) float32 -122.879 ... 
    * Time    (Time) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 
    * south_north  (south_north) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ... 
    * west_east   (west_east) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ... 
    * bottom_top  (bottom_top) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ... 

Data variables: 
GRAUPEL_ACC_NC (Time, south_north, west_east) float32 0.0 0.0 0.0 0.0 ... 
P     (Time, south_north, west_east) float32 101112.0 ... 
PREC_ACC_NC  (Time, south_north, west_east) float32 0.0 0.0 0.0 0.0 ... 
QVAPOR   (Time, south_north, west_east) float32 0.0120251 ... 
SNOW_ACC_NC  (Time, south_north, west_east) float32 0.0 0.0 0.0 0.0 ... 
TK    (Time, south_north, west_east) float32 295.372 295.367 ... 
Z     (Time, south_north, west_east) float32 0.0 0.0 0.0 0.0 ... 

Ich hoffe, ich eine Teilmenge der Daten, die durch die physikalischen Koordinaten (XLAT & XLong) zu erhalten. Zum Beispiel TK unterteilen, um die Gitterpunkte zu erhalten, die zwischen 49 bis 55N und -125 bis -115W liegen.

Das Schneiden der Daten funktioniert z. TK [782: 898,179: 409], weil die geschnittenen Gitterpunkte nicht den konstanten Linien von Breite und Länge folgen, die ich brauche.

Es war ein Beispiel groupby.bins verwenden, aber ich habe nicht in der Lage gewesen, es überhaupt zu verstehen. Ich habe auch versucht, die Werte außerhalb meiner Domain ohne Erfolg zu maskieren.

Wenn jemand irgendwelche Vorschläge hat, würde das sehr geschätzt werden!

Antwort

0

Dies ist eine perfekte Use-Case für where mit drop=True. So etwas wie die folgenden funktionieren sollte:

ds.where((-125 < ds.XLON) & (ds.XLON < -115) 
     & (49 < ds.XLAT) & (ds.XLAT < 55), drop=True) 

where sollte unabhängig arbeiten, aber eine andere Sorge mit Ihren Daten-Set ist, dass Ihre räumlichen Koordinaten (XLON und XLAT) umfassen „Time“ als Dimension. Variieren diese Variablen wirklich im Laufe der Zeit? Wenn nicht, möchten Sie sie möglicherweise anpassen, um die Zeitdimension zu entfernen.

+0

Danke @shoyer für die schnelle Hilfe! Ich bin es gewohnt, Arrays zu nummerieren, wo ich das Zeit-Array leicht durch Indexierung über TK [0] [:] [:] löschen konnte. Wie würde man die Zeitdimension im gesamten Datensatz über xarray löschen/löschen? – jdiction

+0

Siehe http://stackoverflow.com/questions/41836190 für Ihre Nachfragen. – shoyer

Verwandte Themen