Как извлечь координаты, где переменная соответствует критерию для набора данных netCDF с Python и xarray? - PullRequest
0 голосов
/ 30 января 2019

У меня есть объект DataArray xarray da_criteria_daily, сгенерированный из файла netCDF.

<xarray.DataArray (time: 365, latitude: 106, longitude: 193)>
dask.array<shape=(365, 106, 193), dtype=bool, chunksize=(1, 106, 193)>
Coordinates:
  * time       (time) datetime64[ns] 2017-01-01 2017-01-02 ... 2017-12-31
  * latitude   (latitude) float32 -39.2 -39.149525 ... -33.950478 -33.9
  * longitude  (longitude) float32 140.8 140.84792 140.89584 ... 149.95209 150.0

Это ежедневные данные за год для географического экстента.Переменная является логическим типом.

Я хотел бы получить все значения координат (широта, долгота) для конкретной даты, где переменная равна True.

new_da = da_criteria_daily.where(da_criteria_daily==True, drop=True)
print(new_da)

Я получил:

<xarray.DataArray (time: 161, latitude: 106, longitude: 193)>
dask.array<shape=(161, 106, 193), dtype=float64, chunksize=(1, 106, 193)>
Coordinates:
  * time       (time) datetime64[ns] 2017-01-01 2017-01-02 ... 2017-12-31
  * latitude   (latitude) float32 -39.2 -39.149525 ... -33.950478 -33.9
  * longitude  (longitude) float32 140.8 140.84792 140.89584 ... 149.95209 150.0

Есть ли у вас функции с xarray.DataArray, которые можно использовать для получения координат из переменных?

1 Ответ

0 голосов
/ 30 января 2019

Вы можете сделать это с помощью numpy следующим образом:

numpy.argwhere(numpy.array(da_criteria_daily))

numpy.argwhere() дает вам индексы ненулевых (True) элементов.Затем вы можете использовать массивы координат долготы, широты и времени для получения реальных значений.

Использование xarray .where() заменит только значения, которые не соответствуют условию, на nans, то есть ваши значения False будуттеперь будь нанс.Я не знаю ни одного метода xarray, чтобы получить координаты определенных значений.Это было бы определенно полезно, но я думаю, что никто еще не разработал его.

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