使用给定索引置换矩阵

时间:2014-11-23 02:33:33

标签: matlab matrix

给定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循环?

1 个答案:

答案 0 :(得分:4)

您应该可以按如下方式重新排列矩阵:

C = A(index,index);

这会根据索引变量独立重新排列每个维度。