2013-02-15 50 views
0

我希望得到k 的隨機下標可用於C++程序,當前從給定一組下標的文件加載數據。MATLAB:從矩陣中獲取具有條件的k個隨機下標

我有一個MxN矩陣A雙值和Mx1矩陣B與整數從0到20

我怎麼能得到從Ak隨機標與B的條件?在例如,給定:

A = [ 0.25 0.25 0.25 0.25 
     0.18 0.18 0.18 0.18 
     0.36 0.36 0.36 0.36 
     0.51 0.51 0.51 0.51 ] 

B = [ 0 
     1 
     2 
     1 ] 

我想如果B(i) == 1A得到k = 1隨機行標i。所以,我正在尋找i == 1i == 4

我第一次嘗試創建一個邏輯索引:

idx = B == 1; 

,然後從A獲得與該條件如下元素:

r = A(idx, :); 

最後,做一個排列在r,以便獲得k行:

randperm(size(r)) 

但我現在卡住了,因爲我不知道如何將排列轉換爲矩陣A

我也試圖理解函數[I,J] = ind2sub(siz,IND),但現在不知道如何加入下標與randon排列。此外,randperm(size(r))的結果與r的大小有關。

那麼,如何從A得到k隨機下標,條件是B?我們的想法是使用標在C++程序作爲輸入參數

+0

我不明白你想要做什麼。它看起來像你用'B'來選擇你感興趣的'A'的行,但是什麼?你想從'A'的那些行中隨機選擇一個元素嗎?請嘗試解釋一些。 – shoelzer 2013-02-15 18:13:01

+0

@shoelzer這個想法是使用C++程序中的下標作爲輸入參數 – pQB 2013-02-15 18:17:27

回答

1

你可以得到相關的行號如下:

nrs=1:length(idx); 
nrs=nrs(idx); 

現在來排列它們:

nrs_permidx = randperm(length(nrs)) 
permuted = nrs(nrs_permidx) 

而且我想你可以從這裏拿走它。

+0

這就是我一直在尋找的東西。謝謝。 – pQB 2013-02-18 12:43:23