基于 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])
我需要根据布尔数组(其中布尔数组为一维)中的条件对 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])