@leham1

Как в python сделать случайный выбор, но с определенной вероятностью?

Здравствуйте.
Есть список: list = [q1, q2, q3]
Надо выбрать из этого списка одно значение (типа random.choice(list), но чтобы с разной вероятностью для выбора. К примеру с вероятностями:
q1 = 0.2
q2 = 0.3
q3 = 0.5
Возможно ли это? Если да, то как можно сделать?
  • Вопрос задан
  • 157 просмотров
Решения вопроса 5
yupiter7575
@yupiter7575
Python программист
Такой вопрос уже был
Ответ написан
@dmshar
Примерно так:
import random
lt = ['q1','q2', 'q3']
res=[]
for i in range(10000):
    rnd=random.random()
    if rnd<0.2:
        res.append(lt[0])
    elif  rnd<0.5:
        res.append(lt[1])
    else:
        res.append(lt[2])
print(res.count(lt[0]),res.count(lt[1]),res.count(lt[2]))

Тело цикла - как раз и есть выбор с заданной вероятностью. А выводимый результат и сам цикл - проверка того, что данные выбираются действительно с примерно заданной вероятностью:
2018 3020 4962
Ответ написан
aRegius
@aRegius
Python Enthusiast
random.choices(data_list, weights=[0.2, 0.3, 0.5])
Ответ написан
@o5a
Есть еще random.choices. В параметре weights как раз указываются веса каждого значения.
values = [q1, q2, q3]
data = random.choices(values, weights=[0.2, 0.3, 0.5], k=1000)
Ответ написан
Astrohas
@Astrohas
Python/Django Developer
random.choices(['q1', 'q2', 'q3'], weights=[0.2, 0.3, 0.5])


Для того чтобы убедиться что работает

collections.Counter( random.choices(['q1', 'q2', 'q3'], weights=[0.2, 0.3, 0.5]))[0]         for _ in range(100000))

результат
>>> collections.Counter( random.choices(['q1', 'q2', 'q3'], weights=[0.2, 0.3, 0.5]) [0]  for _ in range(100000))
Counter({'q3': 49981, 'q2': 30018, 'q1': 20001})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы