Пустой вывод с использованием условных выражений 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
,