Переставляем матрицу с заданным индексом

Данная матрица симметрии 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?


person karfai    schedule 23.11.2014    source источник


Ответы (1)


Вы должны иметь возможность переставлять свои матрицы следующим образом:

C = A(index,index);

Это независимо перестраивает каждое измерение в соответствии с индексной переменной.

person MrAzzaman    schedule 23.11.2014
comment
@ ParagS.Chandakkar, сожалею об этом. Он прав, только из-за моей опечатки, то получится другой вывод. - person karfai; 23.11.2014
comment
Аналогичный вопрос был задан здесь: stackoverflow.com/questions/27070670/ - Ответственный за вопрос должен узнать из этого OP, что OP более красноречиво заявил о том, что требуется. Кстати +1 для вас, мистер Аззаман! - person rayryeng; 23.11.2014