Случайное неравномерное распределение с заданной пропорцией
У меня есть 3 метки: "A","B","C".
Я хочу создать случайный список из 100 элементов, 60% из которых - "а", 30% - "в", 10% - "С".
Как я могу это сделать? (Я новичок в python, надеюсь, что этот вопрос не слишком глуп.)
Править:
Мой вопрос немного отличается от этого вопроса:
генерировать случайные числа с заданным (числовым) распределением
Как и в комментарии, я хочу, чтобы ровно 60% из них были "а", не каждый элемент имеет 60% вероятность быть "а". Итак, онемевший.случайность.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)
Comments