给定 A 是大小为 n 的对称矩阵,并且
A =
1 2 3 4 5 % The Position
1 [0 5 2 4 1
2 5 0 3 0 2
3 2 3 0 0 0
4 4 0 0 0 5
5 1 2 0 5 0]
B 是排列矩阵 A 行和列的行向量
B = [2 4 1 5 3]
我想要的输出是
C =
2 4 1 5 3 % The New Position given by Matrix B
2 [0 0 5 2 3
4 0 0 4 5 0
1 5 4 0 1 2
5 2 5 1 0 0
3 3 0 2 0 0]
我可以通过使用简单的 for 循环获得输出
index = [2,4,1,5,3];
C = zeros(5,5);
for i = 1:5
for j = 1:5
% Position of in square matrix n
% (i,j) = (i-1)*n + j
C(i,j) = A((index(i)-1)*5+index(j));
end
end
但是,如果我想排列大小为 80x80 的矩阵,那么我需要运行 1600 次才能获得输出。 有什么简单的技巧可以代替使用 for 循环吗?
最佳答案
您应该能够按如下方式重新排列矩阵:
C = A(index,index);
这会根据索引变量独立地重新排列每个维度。
关于matlab - 用给定索引置换矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27085000/