У меня есть xarray.DataArray с глобальными данными. Например:
import numpy as np
import xarray as xr
nlat=46
nlon=90
lat=np.linspace(-90, 90, nlat, endpoint=True)
lat=xr.DataArray(lat, dims=('lat',), coords={'lat':lat},
attrs={'units':'degree north', 'name':'latitude'})
lon=np.linspace(0, 360, nlon, endpoint=False)
lon=xr.DataArray(lon, dims=('lon',), coords={'lon':lon},
attrs={'units':'degree east', 'name':'longitude'})
d=xr.DataArray(np.random.rand(nlat, nlon),
dims=('lat', 'lon'), coords={'lat':lat, 'lon':lon})
Теперь я хочу разделить данные на области. В основном это просто:
aus = d.sel(lat=slice(-44,-10), lon=slice(110, 155))
Проблема в областях на границе переноса, например:
gb = d.sel(lat=slice(50, 60), lon=slice(351, 3))
Конечно, это возвращает пустой массив, так как 351> 3.
В данный момент я помогаю себе сместить сетку, затем выбираю:
d['lon'].values[d['lon'].values>180] -= 360
d = d.sortby(d['lon'])
gb = d.sel(lat=slice(50, 60), lon=slice(-9, 3))
Нет лучшего способа?