我有一个非零数字列表(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的完整数组。
任何想法或建议赞赏!
1条答案
按热度按时间3duebb1j1#
函数
any(np.array(blob_numbers_126_list))
将返回True
,如果blob_numbers_126_list
中有至少一个非零数字,否则返回False
。这就是为什么输出数组完全由1组成的原因。您可以使用
np.isin()
函数,该函数测试数组的每个元素是否也存在于第二个数组中,并返回一个布尔数组。试试这个:字符串