如何将某些索引的行和列移动到矩阵的任何一端?

时间:2015-05-04 06:44:59

标签: arrays matlab matrix

我有一个矩阵让它成为

A = 100x100 matrix

和矢量

B = [ 2 7 23 45 55 67 79 88 92]

我想将这些行和列放到数组的末尾,这意味着A中的最后一个9x9块是B的行和列。 (A的最后一行现在应该是第92行,最后一列应该是第92列)

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

假设您不想更改其余行/列的顺序,请首先安排所有索引:

n = size(A,1);
allIdx = 1:n;
allIdx(B) = []; %// discard B from their original place
allIdx = [allIdx, B]; %// put B at the end
newA = A(allIdx, allIdx); %// Ta-DA!

答案 1 :(得分:1)

setxor的一个选项:

A = reshape(1:10000,100,100);     %// matrix with linear indices
B = [ 2 7 23 45 55 67 79 88 92];  %// rows and cols to move to the end

idx = [setxor(1:size(A,1),B) B];  %// index vector for rows and cols
out = A(idx,idx)

对于更简单的B = [ 1 2 3 4 5 6 7 8 9 ];测试用例,你得到:

enter image description here

答案 2 :(得分:1)

使用ismember

的一种方法
B = [ 2 7 23 45 55 67 79 88 92];
oldIdx = 1:100;
newIdx = [oldIdx(~ismember(oldIdx,B)),B];
out = A(newIdx,newIdx);