2011-02-23 174 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