получить случайный элемент при условии - PullRequest
0 голосов
/ 11 июня 2018

У меня есть два списка: изображения и соответствующие ярлыки.Я хочу получить случайное изображение по данной метке.Я думал об использовании массива numpy для получения логического массива, а затем использовал list.index.Проблема в том, что он возвращает индекс первого появления.Есть идеи?

Ответы [ 3 ]

0 голосов
/ 11 июня 2018

Существует один и только один очевидный способ сделать это;и это использовать random.choice. Вот ссылка на документацию.

Если есть фильтр, который вы хотите применить к своим наборам данных, вы можете рассмотреть возможность использования списка.

Вот что яозначают:

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"])

Список, использующий стандартную библиотеку, и понимания более питонны, чем "произвольный выбор".

0 голосов
/ 11 июня 2018

Есть ли какая-то причина, по которой вы не можете использовать функцию 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
>>> 
0 голосов
/ 11 июня 2018

Используйте 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)]
...