[英]Selecting specific rows from an array when a condition is met in python
我有一個IoU值的numpy數組,具有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的行?
除了使用for
循環,還可以使用更有效的numpy掩碼。
關於您的問題:
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
包含僅包含您要查找的較小值的數組。
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()
是False,即每一個元件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])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.