根据另一个矩阵中的排列构造矩阵

时间:2011-02-23 12:09:23

标签: matlab matrix

我有一个带有尺寸(mxn)的矩阵'eff_tot',我想根据一个名为'matches'的矩阵重新排列(例如[n2 n3; n4 n5])并将所有未在'matches'中指定的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

问候。

1 个答案:

答案 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