我有一个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的行?
答案 0 :(得分:1)
a.any()
的任何元素评估为True
,a
,则 True
会返回False
。
if iou[x,:].any() < 0.5
隐式将iou[x,:].any()
返回的布尔值转换为0和1(事实上,bool
是int
的子类)。因此iou[x,:].any() < 0.5
是True
当且仅当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
包含只有您要查找的小值的数组。