簡體   English   中英

生成n個隨機變量,其總和為1

[英]Generate n random variables whose sum will be 1

我正在嘗試生成一個列表,其中將包含一些總和為1的數字。我正在嘗試的代碼是:

listA = np.zeros(3)    
while(sum(listA) != 1):
        listA = container(np.random.rand() for _ in range(n))

但是,這將永遠運行。 條件是:數字必須為0或正數。 有沒有簡單的方法可以做到這一點? 謝謝。

這個:

listA = [np.random.rand() for _ in range(3)]
scale = sum(listA)
listA = [i / scale for i in listA]

也許這足夠了:

a = np.random.rand()
b = np.random.rand()
while a+b >= 1.0:
    b= np.random.rand()
c = 1.0 - a - b

listA = np.array([a,b,c])

在0到1之間創建(n-1)個隨機浮點數。對它們進行排序。 計算1與最高,最高與第二最高之間的間隔,依此類推。 所有間隔的總和等於1。有n個這樣的間隔(最低的0到最低的間隔)。

更新:我是唯一看到上述縮放方法存在嚴重問題的人嗎?

暫無
暫無

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

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