Пустой вывод с использованием условных выражений OR отличается от вывода с использованием np.isin

У меня есть xarray.Dataset, такой как

<xarray.Dataset>
Dimensions:    (latitude: 3259, longitude: 3699, time: 60)
Coordinates:
  * time       (time) datetime64[ns] 2017-04-03T10:47:53.500000 ...
  * latitude   (latitude) float64 46.62 46.62 46.62 46.62 46.62 46.62 46.62 ...
  * longitude  (longitude) float64 7.82 7.82 7.82 7.82 7.82 7.821 7.821 ...
Data variables:
    slc        (time, latitude, longitude) uint8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
Attributes:
    crs:      EPSG:4326

Я могу отфильтровать это с mcat = (dataset_in.slc == 9) | (dataset_in.slc == 11) получить xarray.DataArray следующим образом

<xarray.DataArray 'slc' (time: 60, latitude: 3259, longitude: 3699)>
array([[[False, False, ..., False, False],
        [False, False, ..., False, False],
        ...,     
       ...
       [[False, False, ..., False, False],
        [False, False, ..., False, False],
        ..., 
        [False, False, ..., False, False],
        [False, False, ..., False, False]]], dtype=bool)
Coordinates:
  * time       (time) datetime64[ns] 2017-04-03T10:47:53.500000 ...
  * latitude   (latitude) float64 46.62 46.62 46.62 46.62 46.62 46.62 46.62 ...
  * longitude  (longitude) float64 7.82 7.82 7.82 7.82 7.82 7.821 7.821 ...

Но мне нужно больше гибкости и использовать вместо условий ИЛИ следующий код

monit_cats = [9,11]
mcat = np.isin(dataset_in.slc, monit_cats)

К сожалению, я получаю "простой" numpy.ndarray

[[[False False False ..., False False False]
  [False False False ..., False False False]
  [False False False ..., False False False]
  ..., 
  ...
  ..., 
  [False False False ..., False False False]
  [False False False ..., False False False]
  [False False False ..., False False False]]]

Как я могу получить точно такой же первый вывод (в формате xarray.DataArray)?

Спасибо за любую информацию.

1 ответ

Это может быть сделано довольно чисто с Xarray's apply_ufunc:

monit_cats = [9,11]
mcat = xr.apply_ufunc(np.isin, dataset_in.slc, monit_cats)

mcats будет xarray.DataArray с размерами / координатами от dataset_in.slc,

Другие вопросы по тегам