我有一个矩阵让它成为
A = 100x100 matrix
和矢量
B = [ 2 7 23 45 55 67 79 88 92]
我想将这些行和列放到数组的末尾,这意味着A
中的最后一个9x9块是B
的行和列。 (A
的最后一行现在应该是第92行,最后一列应该是第92列)
有什么想法吗?
答案 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 ];
测试用例,你得到:
答案 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);