【问题标题】:Set of all elements in masked part of numpy arraynumpy 数组的屏蔽部分中所有元素的集合
【发布时间】: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] 有什么问题?

标签: python numpy set mask


【解决方案1】:

有两种方法可以做到这一点。如果你有一个 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}。

【讨论】:

  • 这个答案使用不同的数组作为问题...
  • 好收获。我已更改答案,使其与问题相符。
【解决方案2】:

除了@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] 集。

【讨论】:

    猜你喜欢
    • 2017-12-18
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多