给定比例的随机非均匀分布
Random non-uniform distribution with given proportion
我有 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() 不是我的解决方案。
如果分布应该是均匀的,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)
如果您希望 正好 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)
我有 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() 不是我的解决方案。
如果分布应该是均匀的,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)
如果您希望 正好 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)