karfai
karfai

Reputation: 906

Permute the Matrix with Given Index

Given A is symmetry matrix with size n and

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 is a row vector that permute the matrix A row and column

B = [2   4   1   5   3]

The output that I want is

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]

I can get the output by using simple for loop

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

However, if I want to permute a matrix with size 80x80, then I need to run 1600 times in order to get the output. Is there any simple trick to do it instead of using for loop?

Upvotes: 2

Views: 96

Answers (1)

MrAzzaman
MrAzzaman

Reputation: 4768

You should be able to rearrange your matrices as follows:

C = A(index,index);

This rearranges each dimension according to the index variable independently.

Upvotes: 4

Related Questions