Change diagonal place

12 次查看(过去 30 天)
Paul
Paul 2011-12-22
How can I switch places the diagonal and the first column from a square matrix?
  1 个评论
Fangjun Jiang
Fangjun Jiang 2011-12-23
You could use an example to explain what you mean.

请先登录,再进行评论。

采纳的回答

bym
bym 2011-12-23
a= magic(3)
a =
8 1 6
3 5 7
4 9 2
>> b=a;
>> for i =2:size(a,1)
b(i,1:i)= fliplr(a(i,1:i));
end
b
b =
8 1 6
5 3 7
2 9 4
  3 个评论
Image Analyst
Image Analyst 2011-12-23
proecsm, I know you know better than that, so I assume you just made a careless error. See my solution for the correct answer. Paul, don't use that method if your size is greater than 3 by 3.
Andrei Bobrov
Andrei Bobrov 2011-12-23
b = 1:size(a,1)+1:numel(a)
c = 1:3
a([b,c]) = a([c,b])

请先登录,再进行评论。

更多回答(1 个)

Image Analyst
Image Analyst 2011-12-23
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 个评论
Andrei Bobrov
Andrei Bobrov 2011-12-23
b = 1:size(a,1)+1:numel(a)
c = 1:size(a,1)
a([b,c]) = a([c,b])
Image Analyst
Image Analyst 2011-12-23
OK, this one works.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Operating on Diagonal Matrices 的更多信息

标签

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by