具有给定比例的随机非均匀分布

时间:2015-03-22 01:06:27

标签: python non-uniform-distribution

我有3个标签:“A”,“B”,“C”。

我想生成一个包含100个元素的随机列表,其中60%是“A”,30%是“B”,10%是“C”。

我该怎么做? (我是python的新手,希望这个问题不是太傻。)


编辑: 我的问题与这个问题略有不同: Generate random numbers with a given (numerical) distribution

就像在评论中一样,我希望其中有60%是“A”,并非每个元素都有60%的概率为“A”。所以numpy.random.choice()不适合我。

3 个答案:

答案 0 :(得分:5)

您可以只列出一个列表。让我们说你创建列表

x = list('A'*60 + 'B'*30 + 'C'*10)

然后,您可以像这样随机播放就地

from random import shuffle
shuffle(x)

答案 1 :(得分:3)

如果分布应该是统一的,那么平均 会在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)

答案 2 :(得分: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

的内容