簡體   English   中英

在python中滿足條件時從數組中選擇特定行

[英]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評估為TrueFalse否則。

if iou[x,:].any() < 0.5隱式將iou[x,:].any()返回的布爾值轉換為0和1(實際上, boolint的子類)。 因此iou[x,:].any() < 0.5True當且僅當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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM