這裏是矩陣會是什麼樣子:如何創建這樣的隨機矩陣的所有行之和爲1
有8列,並說100行,隨機數的任何行總和爲1
.125 .125 .125 .125 .125 .......
0.005 .105 0.005 .205 ....... .205
0.002 0.003 0.012。 201 ....... 0.200
...
莫非Matlab的自動生成這種矩陣,即一個right stochastic matrix?我正在尋找一個腳本。
這裏是矩陣會是什麼樣子:如何創建這樣的隨機矩陣的所有行之和爲1
有8列,並說100行,隨機數的任何行總和爲1
.125 .125 .125 .125 .125 .......
0.005 .105 0.005 .205 ....... .205
0.002 0.003 0.012。 201 ....... 0.200
...
莫非Matlab的自動生成這種矩陣,即一個right stochastic matrix?我正在尋找一個腳本。
使用bsxfun
,而不是repmat
:
mat = rand(100, 8);
rowsum = sum(mat,2);
mat = bsxfun(@rdivide, mat, rowsum);
好
rand(100,8)
會產生隨機數的100行和8列其所有的條目可以被添加到1。如果你想要什麼,不辦一個矩陣,你必須多解釋一下自己。
您可以先創建隨機矩陣,然後規範化它使每行都有一個總和等於1(如果這是你的意思):
mat=rand(100,8);
matnorm=repmat(sum(mat,2),1,8);
mat=mat./matnorm;
這裏的另一個想法:對於每一行,你可以生成7張隨機數(0和1之間),並把這些作爲你的「間隔」的位置 - 那筆換句話說,在8張隨機數爲1時,這些是你的部分款項。然後,您可以對它們進行排序並採取差異來獲得隨機數字。這裏是我在想什麼的代碼:
numrows = 100;
partialsums = [zeros(numrows,1), rand(numrows,7), ones(numrows,1)];
partialsums = sort(partialsums, 2);
randmat = diff(partialsums, 1, 2);
根據你的方式,數字的分佈會有所不同。我將這種方法與Aabaz發佈的方法進行了比較,我得到了這個分發。
所以我的看起來多了幾分指數,你得到一些更高的價值,他是一個小更均勻,但你得到的隨機數的下限截止。
+1指出有不同的方式導致不同的分佈。 – 2013-06-17 14:00:59
第1步:計算向量的範數,它是該向量中元素平方和的平方根。
第2步:將向量中的每個元素除以向量的範數。
第3步:將得到的矢量與其轉置相乘,以平方矢量中的每個元素。
然後,可以看到,在向量(最終)得到的元素的總和加起來爲1。
-1這就產生隨機數的矩陣中,每個0和1之間的行別分佈t總和爲1,這是提問者所要求的。 – Matt 2012-02-16 16:02:45