在python中满足条件时从数组中选择特定行

时间:2018-04-10 21:23:47

标签: python numpy

我有一个Numpy数组的IoU值,包含300行和4列。如果该行中的每个元素都小于0.5,则选择一行。我编写了一个试图执行此操作的代码,但它返回的行中每个元素都为零。

import numpy as np
iou = np.random.rand(300,4)

negative_boxes = []
for x in range(len(iou)):
    if iou[x,:].any() < 0.5:
       negative_boxes.append(iou[x])

如何选择每个元素小于0.5的行?

2 个答案:

答案 0 :(得分:1)

如果a.any()的任何元素评估为Truea,则

True会返回False

if iou[x,:].any() < 0.5隐式将iou[x,:].any()返回的布尔值转换为0和1(事实上,boolint的子类)。因此iou[x,:].any() < 0.5True当且仅当iou[x,:].any()为假时,即iou[x,:]的每个元素都为0。

要检查数组a的所有元素是否小于0.5,请使用np.all

import numpy as np
iou = np.random.rand(300,4)

negative_boxes = []
for x in range(len(iou)):
    if np.all(iou[x, :] < 0.5):
       negative_boxes.append(iou[x])

答案 1 :(得分:1)

您可以使用更高效的numpy掩码,而不是for循环。

解决您的问题:

import numpy as np
iou = np.random.rand(300,4)
indices = np.where((iou < 0.5).all(axis=1))
negative_boxes = iou[indices]

然后indices包含所有值小于0.5的行的所有索引,negative_boxes包含只有您要查找的小值的数组。