首页 > 解决方案 > 在一维布尔数组中查找连续区域

问题描述

如果我有一个一维布尔数组,比如说np.array([True, False, True, True True, False, True, True]),我想要一个可以返回给我的所有连续区域的索引的函数True

例如,在上述数组上调用的此函数的输出将产生类似[(0,0), (2,4), (6,7)].

我不确定如何很好地做到这一点,我也希望能够使用 PyTorch 张量来做到这一点。

标签: pythonnumpy

解决方案


我已经在我编写的名为haggis的实用程序库中实现了这个确切的东西。功能是haggis.math.mask2runs。我写它的部分原因是为了解决 Stack Overflow 上这个反复出现的问题:

runs = haggis.math.mask2runs(mask)

第二列是排他索引,因为这在 python 和 numpy 中都更有用,所以你可能想要这样做

runs[:, -1] -= 1

这个功能没有什么特别之处。您可以使用 numpy 将其编写为单行:

runs = numpy.flatnonzero(np.diff(numpy.r_[numpy.int8(0), mask.view(numpy.int8), numpy.int8(0)])).reshape(-1, 2)

推荐阅读