我有两个列表:图像和相应的标签。我希望通过给定标签获得随机图像。我想过使用numpy数组来获取布尔数组,然后使用list.index。问题是它返回第一次出现的指数。有什么想法吗?
答案 0 :(得分:2)
使用numpy.where
获取包含条件为真的索引的数组,然后使用numpy.random.choice
随机选择一个:
import numpy as np
# to always get the same result
np.random.seed(42)
# setup data
images = np.arange(10)
labels = np.arange(10)
# select on the labels
indices = np.where(labels % 2 == 0)[0]
print(indices)
# [0, 2, 4, 6, 8]
# choose one
random_image = images[np.random.choice(indices)]
print(random_image)
# 6
你可能想把它放在一个函数中:
from numpy import where
from numpy.random import choice
def random_img_with_label(images, labels, label):
indices = where(labels == label)[0]
return images[choice(indices)]
答案 1 :(得分:0)
有一种,也是唯一一种明显的方法可以做到这一点;那就是使用random.choice。 Here's a link to the documentation.
如果您要将过滤器应用于数据集,则可以考虑使用列表推导。
这就是我的意思:
import random
image_list = [ "image0"
, "image1"
, "image2"
, "image3"
, "image4"
, "image5"
, "image6"
]
label_list = [ "labelA"
, "labelB"
, "labelC"
, "labelA"
, "labelB"
, "labelC"
, "labelA"
]
print random.choice([img for (img, lbl) in zip(image_list, label_list) if lbl == "labelA"])
使用标准库的列表和理解比“滚动你自己的”随机选择器更加pythonic。
答案 2 :(得分:0)
是否有某些原因导致您无法使用random
功能?
即
>>> import random
>>> labels=['label 1','label 2','label 3','label 4']
>>> images=['image1.png','image2.png','image3.png','image4.png','image5.png','image6.png']
>>> for i in labels: print(random.choice(images))
...
image2.png
image4.png
image3.png
image3.png
>>>