Случайное неравномерное распределение с заданной пропорцией
У меня есть 3 ярлыка: "А", "В", "С".
Я хочу создать случайный список из 100 элементов, 60% из которых "A", 30% "B", 10% "C".
Как я могу это сделать? (Я новичок в Python, надеюсь, этот вопрос не слишком глуп.)
Изменить: Мой вопрос немного отличается от этого вопроса: генерировать случайные числа с заданным (числовым) распределением
Как и в комментарии, я хочу, чтобы 60% из них были "А", а не у каждого элемента вероятность 60% была бы "А". Так что numpy.random.choice() не является решением для меня.
3 ответа
Если вы хотите , чтобы именно 60% составляли A, 30% B и 10% C, и вы знаете, что всего должно быть 100 элементов, вы можете сделать что-то вроде следующего:
import random
num = 100
prob_a = 0.6
prob_b = 0.3
prob_c = 0.1
As = int(num*prob_a) * 'A'
Bs = int(num*prob_b) * 'B'
Cs = int(num*prob_c) * 'C'
# create a list with 60 As, 30 Bs, and 10 Cs
chars = list(As + Bs + Cs)
random.shuffle(chars)
print("".join(chars))
Это выведет что-то вроде BAAAAABBCBAABABAAAACAABBAABACAACBAACBBBAAACBAAAABAAABABAAAAABBBABAABAABAACCAABABAAAAAACABBBBCABAAAAA
Вы можете просто переставить список. Допустим, вы создали список
x = list('A'*60 + 'B'*30 + 'C'*10)
Затем вы можете перемешать это на месте следующим образом:
from random import shuffle
shuffle(x)
Примерно так, если распределение должно быть равномерным, A будет в среднем происходить в 60% случаев, и поэтому другие значения
import random
res = []
for i in range(0, n_samples):
r = random.random()
if(r<=0.6): res.append(A)
elif(r>0.7): res.append(B)
elif(r>0.6 and r<=0.7): res.append(C)