2017-04-01 58 views

回答

1

如果你選擇在n號碼[0,1],你實際上是撿n-1斷點其總和爲1。你可以選擇斷點,然後向後工作的數字:

rand.sum <- function(n){ 
    x <- sort(runif(n-1)) 
    c(x,1) - c(0,x) 
} 

然後

t(replicate(4,rand.sum(30))) 

將是隨機數的4×30矩陣,其中eaxch行總和爲1

+0

謝謝很多爲您的答案。 – Sharon

3

下面是基於softmax(多項式對數)變換的解決方案。

m <- matrix(rnorm(4 * 30), nrow=30) 
prob <- exp(m)/rowSums(exp(m)) 

rowSums(prob) 
#[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 

all(prob > 0 & prob < 1) 
#[1] TRUE 
相關問題