簡體   English   中英

具有給定比例的隨機非均勻分布

[英]Random non-uniform distribution with given proportion

我有3個標簽:“A”,“B”,“C”。

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

我怎樣才能做到這一點? (我是python中的新手,希望這個問題不是太傻。)


編輯:我的問題與這個問題略有不同: 生成具有給定(數字)分布的隨機數

就像在評論中一樣,我希望它們中的60%都是“A”,並非每個元素都有60%的概率為“A”。 所以numpy.random.choice()不是我的解決方案。

您可以只列出一個列表。 讓我們說你創建列表

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

然后,您可以像這樣在原地進行隨機播放:

from random import shuffle
shuffle(x)

如果分布應該是統一的,那么在平均 60%的情況下會出現A,所以其他值也是如此

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM