基于 python 中的布尔数组切片数组

Slicing arrays based on boolean array in python

我需要根据布尔数组(其中布尔数组为一维)中的条件对 xyz 坐标数组进行切片。

如果我的布尔数组是

[1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1]

我需要它对它进行切片以生成以下索引数组:

[0, 1, 2, 3, 6, 7, 10, 11, 12] ([:-2] between True indices)

最终所需的输出将是这些索引处的 xyz 坐标数组:

[xyz[0], xyz[1], xyz[2] xyz[3], xyz[6] xyz[7], xyz[10] xyz[11], xyz[12]]

其他两个切片(具有相似的期望输出)如下:

[1, 2, 3, 4, 7, 8, 11, 12, 13] ([1:-1] between True indices)

[2, 3, 4, 5, 8, 9, 12, 13, 14] ([2:] between True indices)

有没有一种 pythonic 方法可以在没有列表理解的情况下做到这一点?

谢谢!

看起来 numpy.ndarray.nonzero 是您需要的:

a = np.asarray([1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1])
print(a.nonzero())

输出:

array([ 0,  5,  6,  9, 10, 14])