Нарезка координаты долготы в xarray, который пересекает 0 - PullRequest
0 голосов
/ 29 марта 2020

У меня есть набор данных xarray с координатами долготы от 0,5 до 359,5, например:

Dimensions:    (bnds: 2, lat: 40, lev: 35, lon: 31, member_id: 1)
Coordinates:
    lev_bnds   (lev, bnds) float64 ...
    lon_bnds   (lon, bnds) float64 ...
    lat_bnds   (lat, bnds) float64 ...
  * lon        (lon) float64 0.5 1.5 2.5 3.5 4.5 ... 359.5
  * lev        (lev) float64 2.5 10.0 20.0 32.5 ... 5e+03 5.5e+03 6e+03 6.5e+03
  * lat        (lat) float64 -89.5 -88.5 -87.5 -86.5 ... -53.5 -52.5 -51.5 -50.5
  * member_id  (member_id) object 'r1i1p1f1'
Dimensions without coordinates: bnds
Data variables:
    so         (member_id, lev, lat, lon) float32 nan nan nan ... 

Область, которая меня интересует, находится в диапазоне от 60 Вт до 30E, что, вероятно, соответствует долготе от 300,5 до 30,5. Есть ли способ разрезать набор данных между этими координатами? Я пытался использовать isel(slice(-60,30), но в функции среза невозможно получить отрицательные или положительные числа. Я знаю, что могу просто разделить данные на два маленьких (300,5-359,5 и 0,5-30,5), но мне было интересно, есть ли лучший способ.

Спасибо!

1 Ответ

1 голос
/ 31 марта 2020

Как вы правильно указали, в настоящее время isel не может выбрать ни начало, ни конец измерения за один проход.

В сочетании с roll http://xarray.pydata.org/en/stable/generated/xarray.DataArray.roll.html вы можете переместить нужные вам точки в непрерывную область, а затем выбрать те, которые вам нужны.

Примечание: I Вы не можете быть уверены в своем примере, но похоже, что вы хотите sel вместо isel, учитывая, что вы можете выбирать по значению индекса, а не по позиции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...