我有一個矩陣,我想選擇t隨機列從一個新的矩陣在八度隨機,但我希望我的隨機選擇加權的比例基於奇異值分解的矩陣。所以基本上我想選擇t隨機列,其概率是在選擇之前確定的。有沒有辦法在Octave/Matlab中做到這一點?在Octave中抽樣隨機列
謝謝!
我有一個矩陣,我想選擇t隨機列從一個新的矩陣在八度隨機,但我希望我的隨機選擇加權的比例基於奇異值分解的矩陣。所以基本上我想選擇t隨機列,其概率是在選擇之前確定的。有沒有辦法在Octave/Matlab中做到這一點?在Octave中抽樣隨機列
謝謝!
假設你有重量,W
,(或者你的情況可能是一些矩陣的特徵值的函數)的一些行向量,你應該先創建一個表示權重的標準化累積總和向量如下:
cumNormW = cumsum(W)./sum(W);
cumNormW
的值現在應該是單調增加的,應該從W(1)
到1
。
下一步,你要採取從均勻分佈在繪製[0,1]
randVal = rand(1);
您將使用這個隨機值來查找你剛纔隨機選擇相應的列。最後,您想要找到累積歸一化權重向量的第一個索引。
randCol = find(cumNormW <= randVal, 1, 'last')
這爲您提供最終的隨機列選擇。
現在如果你想確保你選擇t
不同列,你需要不斷的randCol
先前值的軌道,只是再次重申上述上面randVal
,randCol
步驟,直到產生一個尚未未選中列。
例
比方說,你有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
。
請參閱http://stackoverflow.com/questions/2977497/weighted-random-numbers-in-matlab – carandraug 2013-05-01 22:27:13