根据条件从numpy数组中删除行

5
我有一个形状为[6,2]的2D numpy数组,我想要移除第三个元素包含0的子数组。
array([[0, 2, 1], #Input
       [0, 1, 1],
       [1, 1, 0],
       [1, 0, 2],
       [0, 2, 0],
       [2, 1, 2]])

array([[0, 2, 1], #Output
       [0, 1, 1],
       [1, 0, 2],
       [2, 1, 2]]) 

我的代码是positives = gt_boxes[np.where(gt_boxes[range(gt_boxes.shape[0]),2] != 0)]

它能够正常工作,但是否有更简化的方法?

1个回答

14
您可以使用布尔索引。
In [413]: x[x[:, -1] != 0]
Out[413]: 
array([[0, 2, 1],
       [0, 1, 1],
       [1, 0, 2],
       [2, 1, 2]])

  1. x[:, -1]将检索最后一列。

  2. x[:, -1] != 0返回一个布尔掩码。

  3. 使用掩码作为索引来访问原始数组。


1
糟糕,我没能完成我的解决方案,而且它仍然比这个更长。+1 - Christian Dean
2
@ChristianDean 哟,这就是我在标签中99%时间的感觉 :p - cs95

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接