需要对numpy索引进行一些澄清吗?

时间:2016-03-03 09:39:29

标签: python python-3.x numpy indexing

我有以下numpy数组:

        boxIDx = 3
        index = np.array([boxIDs!=boxIDx]).reshape(-1,1)
        print('\nbboxes:\t\n', bboxes)
        print('\nboxIDs:\t\n', boxIDs)
        print('\nIndex:\t\n', index)

输出结果为:

    bboxes: 
     [[370 205  40  40]
      [200 100  40  40]
      [ 30  50  40  40]]
    boxIDs: 
     [[1]
      [2]
      [3]]
    Index:  
     [[ True]
      [ True]
      [False]]

问题:如何使用我的索引来删除'第三行(bbox)?

我试过了:

bboxes = bboxes[index,:]

以及:

bboxes = bboxes[boxIDs!=boxIDx,:]

这两个都给我以下错误:

IndexError: too many indices for array

对不起,如果这是愚蠢的 - 但我在这里遇到了麻烦:/

2 个答案:

答案 0 :(得分:2)

发生错误是因为您正在尝试传递矢量而不是索引数组。您可以对reshape(-1)使用reshape(3)index

In [56]: bboxes[index.reshape(-1),:]
Out[56]:
array([[370, 205,  40,  40],
       [200, 100,  40,  40]])

In [57]: bboxes[index.reshape(3),:]
Out[57]:
array([[370, 205,  40,  40],
       [200, 100,  40,  40]])

In [58]: index.reshape(-1)
Out[58]: array([ True,  True, False], dtype=bool)

In [59]: index.reshape(-1).shape
Out[59]: (3,)

答案 1 :(得分:1)

由于Index是二维的,你必须摆脱额外的维度,所以

no_third = bboxes[Index[:,0]] 
# array([[370, 205,  40,  40],
#        [200, 100,  40,  40]])