使用OR条件的Numpy输出与使用np.isin

时间:2018-01-14 17:09:07

标签: python numpy python-xarray

我有一个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 ...

但我需要更多的灵活性,而不是使用以下代码的OR条件

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 个答案:

答案 0 :(得分:0)

这可以通过xarray apply_ufunc完全干净地完成:

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

mcats将是xarray.DataArray,尺寸/坐标为dataset_in.slc