【发布时间】:2021-12-15 21:18:13
【问题描述】:
如何找到掩码 numpy 数组掩码中的所有唯一元素的集合?
例如,我有
seg = np.array([[1,2,3,4]])
mask = np.array([[False, True, False, True]])
我如何把它变成集合{2, 4}?
【问题讨论】:
-
seg[mask]有什么问题?
如何找到掩码 numpy 数组掩码中的所有唯一元素的集合?
例如,我有
seg = np.array([[1,2,3,4]])
mask = np.array([[False, True, False, True]])
我如何把它变成集合{2, 4}?
【问题讨论】:
seg[mask] 有什么问题?
有两种方法可以做到这一点。如果你有一个 numpy.ma 类型的数组,它是原生 numpy 掩码数组类,你可以将掩码数组展平,然后将其转换为列表,然后是集合:
y = ma.array(seg, mask=1-mask)
print(set(y.flatten().tolist()) - {None})
将打印 {2, 4}。
但是,根据您的设置方式,掩码和 seg 位于两个单独的 numpy 数组中。所以你可以这样做:
boundaries = set(seg[np.where(mask)])
print(boundaries)
这会找到掩码为1的索引,在这些索引处获取seg的元素,并将它们组成一个集合。
编辑: 您可以按照 hpaulj 的评论使用 seg[mask]:
boundaries = set(seg[mask])
print(boundaries)
将打印 {2, 4}。
【讨论】:
除了@chenjesu的回答,你还可以得到一个集合[2 4],而不是一个numpy数组,函数如下:
def find_unique_elements(seg, mask):
# Find the unique elements in the mask of the masked array.
unique_elements = np.unique(seg[mask])
return unique_elements
在您的情况下,这将返回 [2 4] 集。
【讨论】: