2011-02-23 205 views
2

我有一個矩陣'eff_tot',其維度(mxn),我想根據稱爲'匹配'的矩陣重新排列(例如[n2 n3; n4 n5]),並將所有未指定的collumns放入'匹配'結尾。根據另一個矩陣中的排列構造矩陣

也就是說,我想擁有[eff_tot(:,n2) eff_tot(:,n3) ; eff_tot(:,n4) eff_tot(:,n5) ; eff_tot(:,n1)]

這就是所有人!

以在第一個答案的例子,我想有是:

eff_tot =

81 15 45 15 24 
44 86 11 14 42 
92 63 97 87  5 
19 36  1 58 91 
27 52 78 55 95 
82 41  0  0  0 
87  8  0  0  0 
9 24  0  0  0 
40 13  0  0  0 
26 19  0  0  0 

問候。

回答

2

創建一個向量,列出eff_tot中所有列的索引,然後使用SETDIFF來確定哪些列不會在[n2 n3 n4 n5]中發生。這些列是無與倫比的。現在連接匹配和不匹配的列索引,以創建您的列重新排列的eff_tot矩陣。

 
>> eff_tot = randi(100, 5, 7) 

eff_tot = 

    45 82 81 15 15 41 24 
    11 87 44 14 86  8 42 
    97  9 92 87 63 24  5 
    1 40 19 58 36 13 91 
    78 26 27 55 52 19 95 

>> n2 = 3; n3 = 5; n4 = 2; n5 = 6; 
>> missingColumn = setdiff(1:size(eff_tot, 2), [n2 n3 n4 n5]) 

missingColumn = 

    1  4  7 

>> eff_tot = [eff_tot(:,n2) eff_tot(:,n3) eff_tot(:,missingIndex); eff_tot(:,n4) eff_tot(:,n5) zeros(size(eff_tot, 1), length(missingIndex))]; 

eff_tot = 

    81 15 45 15 24 
    44 86 11 14 42 
    92 63 97 87  5 
    19 36  1 58 91 
    27 52 78 55 95 
    82 41  0  0  0 
    87  8  0  0  0 
    9 24  0  0  0 
    40 13  0  0  0 
    26 19  0  0  0 
+0

謝謝你的回答。這幾乎是我想要的。 :-)我在我的問題中有一個錯過類型。 '匹配'矩陣應該是'[n2 n3; n4 n5]',在相應的'eff_tot'中應該'n2'和'n4'連續。 – Johan

+0

@Johan - 爲什麼只差不多? –

+0

我編輯了我的問題,解釋了原因。 – Johan