numpy 如何找到列表中存在的xarray值?

0s7z1bwu  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(87)

我有一个非零数字列表(blob_numbers_126_list),我想与一个相当大的数据数组进行比较。

blob_numbers_126 = blobs_126.where(icemask_126_regrid[30,:,:] == 1).data.flatten()
blob_numbers_126 = blob_numbers_126[~np.isnan(blob_numbers_126)]
blob_numbers_126_list = list(set(blob_numbers_126[blob_numbers_126!=0]))

字符串
我目前正在尝试使用xr.where()将datarray(time,lat,lon)(blobs_126)与列表进行比较。如果数据数组中的值存在于列表中,我希望它使该单元格为1,否则我希望它为0。
以下是我目前拥有的:

blobs_126_source = blobs_126.where(blobs_126[:,:,:].data == any(np.array(blob_numbers_126_list)),1,0)


这给了

xarray.DataArray'ar_binary_tag'time: 44521lat: 192lon: 288
array([[[1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        ...,
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1]],

       [[1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        ...,
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1]],

       [[1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        ...,
...
        ...,
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1]],

       [[1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        ...,
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1]],

       [[1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        ...,
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1],
        [1, 1, 1, ..., 1, 1, 1]]], dtype=int32)
Coordinates:
time
(time)
float64
-1.34e+07 -1.34e+07 ... -1.313e+07
lat
(lat)
float64
-90.0 -89.06 -88.12 ... 89.06 90.0
lon
(lon)
float64
0.0 1.25 2.5 ... 356.2 357.5 358.8
Indexes: (3)
Attributes: (0)


我期待一个二进制数组,其中1表示在列表中找到了dataarray中的值,0表示在列表中没有找到该值。但是我只得到了一个1的完整数组。
任何想法或建议赞赏!

3duebb1j

3duebb1j1#

函数any(np.array(blob_numbers_126_list))将返回True,如果blob_numbers_126_list中有至少一个非零数字,否则返回False。这就是为什么输出数组完全由1组成的原因。
您可以使用np.isin()函数,该函数测试数组的每个元素是否也存在于第二个数组中,并返回一个布尔数组。试试这个:

blobs_126_source = xr.DataArray(np.isin(blobs_126.data,blob_numbers_126_list).astype(int), coords=blobs_126.coords)

字符串

相关问题