Change diagonal place
Afficher commentaires plus anciens
How can I switch places the diagonal and the first column from a square matrix?
1 commentaire
Fangjun Jiang
le 23 Déc 2011
You could use an example to explain what you mean.
Réponse acceptée
Plus de réponses (1)
Image Analyst
le 23 Déc 2011
This code works of a square matrix of any size. I present both a looping and vectorized way.
a=magic(6)
b=a;
for i =2:size(a,1)
temp = a(i,i);
b(i,i)= b(i,1);
b(i,1) = temp;
end
b
% Loopless way
a=magic(6)
b=a;
diagonalElementsMask = logical(eye(size(a,1)))
% Save diagonal elements, because we're going to replace them.
bDiagonalElements = b(diagonalElementsMask)
% Replace diagonal elements with first column.
b(diagonalElementsMask) = b(:,1);
% Replace first column with diagonal elements.
b(:,1) = bDiagonalElements
a =
35 1 6 26 19 24
3 32 7 21 23 25
31 9 2 22 27 20
8 28 33 17 10 15
30 5 34 12 14 16
4 36 29 13 18 11
b =
35 1 6 26 19 24
32 3 7 21 23 25
2 9 31 22 27 20
17 28 33 8 10 15
14 5 34 12 30 16
11 36 29 13 18 4
3 commentaires
bym
le 23 Déc 2011
careless indeed :| +1
Andrei Bobrov
le 23 Déc 2011
b = 1:size(a,1)+1:numel(a)
c = 1:size(a,1)
a([b,c]) = a([c,b])
Image Analyst
le 23 Déc 2011
OK, this one works.
Catégories
En savoir plus sur Operating on Diagonal Matrices dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!