我有一个带有尺寸(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
问候。
答案 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