2016-10-24 95 views
0

我需要根据布尔数组中的条件切片xyz坐标数组(其中布尔数组为1D)。在Python中基于布尔数组切片数组

如果我的布尔数组是

[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]真索引之间)

最终期望的输出将是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])

[2,3,4,5,8, 9,12,13,14](真指数之间的[2:])

是否有Python方法来做这个没有列表理解?

谢谢!

+0

应该是什么这 “片” 的结果,例如在真指标之间'[0,1,2,3,6,7,10,11,12]([:-2])预计什么输出? – Vader

+0

指数是输出(我认为)。最终目标是在这些指数处分离感兴趣的xyz坐标。我将编辑问题的清晰度 – user2770149

+0

为什么没有列表理解?这可能是最pythonic的方式 –

回答

0

看起来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])