2013-05-01 128 views
0

我有一個矩陣,我想選擇t隨機列從一個新的矩陣在八度隨機,但我希望我的隨機選擇加權的比例基於奇異值分解的矩陣。所以基本上我想選擇t隨機列,其概率是在選擇之前確定的。有沒有辦法在Octave/Matlab中做到這一點?在Octave中抽樣隨機列

謝謝!

+0

請參閱http://stackoverflow.com/questions/2977497/weighted-random-numbers-in-matlab – carandraug 2013-05-01 22:27:13

回答

0

假設你有重量,W,(或者你的情況可能是一些矩陣的特徵值的函數)的一些行向量,你應該先創建一個表示權重的標準化累積總和向量如下:

cumNormW = cumsum(W)./sum(W); 

cumNormW的值現在應該是單調增加的,應該從W(1)1

下一步,你要採取從均勻分佈在繪製[0,1]

randVal = rand(1); 

您將使用這個隨機值來查找你剛纔隨機選擇相應的列。最後,您想要找到累積歸一化權重向量的第一個索引。

randCol = find(cumNormW <= randVal, 1, 'last') 

這爲您提供最終的隨機列選擇。

現在如果你想確保你選擇t不同列,你需要不斷的randCol先前值的軌道,只是再次重申上述上面randValrandCol步驟,直到產生一個尚未未選中列。


比方說,你有4列的矩陣,你已經計算出該矩陣的特徵值和存儲他們W.我們假設列對應的特徵向量,你想選擇與特徵值成比例的列與特徵值之和進行比較。

W = [4 3 2 1]; 

正火後,你會得到cumNormW = [0.40 0.70 0.90 1];

正如你所看到的,你有畫一個​​數字,導致比上選擇第一列(`randVal < = 0.4' )的顯著概率較高列('0.9 < randVal < = 1')

您可以通過rand(1)繪製一個隨機數,對於此示例,可以說randVal = 0.82。使用最後的randCol步驟,對於此迭代,您將獲得randCol = 3