es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Xarray: cortando latitud y longitud utilizando el nombre de la dimensión

Estoy escribiendo un programa que abrirá datos NetCDF meteorológicos en una red meteorológica, los rebanará para una región dada y luego realizará algunos cálculos, por ejemplo:

data = xr.open_dataset(SomeFile)

DatosRebanados = data.sel(lat=slice(max_lat,min_lat),
                lon=slice(min_lon,max_lon))
ResultadoEjemplo = DatosRebanados.mslp.average('lon')

A continuación se muestra un ejemplo de cómo podría estar estructurado ‘data’:

<xarray.dataset>
Dimensions:  (lon: 144, lat: 37, level: 17, time: 25)
Coordinates:
  * lon      (lon) float32 -180.0 -177.5 -175.0 -172.5 ... 172.5 175.0 177.5
  * lat      (lat) float32 0.0 -2.5 -5.0 -7.5 -10.0 ... -82.5 -85.0 -87.5 -90.0
  * level    (level) float32 1e+03 925.0 850.0 700.0 ... 50.0 30.0 20.0 10.0
  * time     (time) datetime64[ns] 2011-05-25 2011-05-25T06:00:00 ... 2011-05-31
Data variables:
    air      (time, level, lat, lon) float32 ...
    hgt      (time, level, lat, lon) float32 ...
    rhum     (time, level, lat, lon) float32 ...
    omega    (time, level, lat, lon) float32 ...
    uwnd     (time, level, lat, lon) float32 ...
    vwnd     (time, level, lat, lon) float32 ...
    mslp     (time, lat, lon) float32 ... 

Sin embargo, distintas fuentes de datos almacenan las coordenadas de latitud y longitud utilizando diferentes indexadores: podría ser, por ejemplo, ya sea latitude/longitude o lat/lon. Entonces, por ejemplo, si los indexadores utilizados son latitude/longitude, lo siguiente:

DatosRebanados = data.sel(lat=slice(max_lat,min_lat),
                    lon=slice(min_lon,max_lon))

Devolvería:

KeyError: 'lat is not a valid dimension or coordinate' 

¿Hay alguna manera de rebanar los datos utilizando Xarray utilizando una cadena como indexador de coordenadas? Por ejemplo:

python
IndexadorLat, IndexadorLon = 'lat', 'lon'
DatosRebanados = data.sel(IndexadorLat=slice(max_lat,min_lat),
IndexadorLon=slice(min_lon,max_lon))
</xarray.dataset>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes cortar los datos utilizando Xarray utilizando una cadena como índice de coordenadas utilizando la notación de corchetes cuadrados de la siguiente manera:

    LatIndexer, LonIndexer = 'lat', 'lon'
    SlicedData = data.sel({LatIndexer: slice(max_lat, min_lat),
                            LonIndexer: slice(min_lon, max_lon)})
    

    Esta notación es similar a proporcionar los índices de coordenadas como un diccionario. Puedes reemplazar las variables de cadena LatIndexer y LonIndexer con los nombres reales de los indexadores utilizados en tus fuentes de datos, por ejemplo, latitude y longitude.

Comments are closed.