How to read elements of a matrix diagonally in MATLAB?

1 Ansicht (letzte 30 Tage)
Febin Benjamin
Febin Benjamin am 18 Sep. 2013
Suppose A is a 3X3 matrix
A=[2,5,7; 3,0,1; 9,17,23]
I want to read the elements in this fashion.
2
5 3
9 0 7
1 17
23

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 18 Sep. 2013
Bearbeitet: Andrei Bobrov am 18 Sep. 2013
A=[2,5,7; 3,0,1; 9,17,23]
k = spdiags(rot90(A));
s = size(k);
nns = nan(s);
ptr = tril(triu(ones(s)),s(1)-1);
nns(ptr>0) = k(ptr>0);
nns(:,1:2:end) = nns(end:-1:1,1:2:end);
out = sort(ptr,'descend');
out(out>0) = nns(~isnan(nns));
out = out';
or
A=[2,5,7; 3,0,1; 9,17,23];
ds = spdiags(rot90(A));
l = spdiags(ones(size(A)));
ds(:,1:2:end) = flipud(ds(:,1:2:end));
l(:,1:2:end) = flipud(l(:,1:2:end));
l2 = sort(l,'descend');
l2(l2>0) = ds(l>0);
out = l2';
  4 Kommentare
Febin Benjamin
Febin Benjamin am 18 Sep. 2013
@Jan: I tried hard to frame the question in a comprehensive way but that's what I managed to come up with. :) Fortunately, Andrei got it! hehe :)
Andrei Bobrov
Andrei Bobrov am 18 Sep. 2013
B = [2,5,7; 3,0,1; 9,17,23];
A = fliplr(B); % and etc

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Operating on Diagonal Matrices finden Sie in Help Center und File Exchange

Tags

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by