Convert values upper triangular matrix into vector
Show older comments
Hi all,
Imagine a matrix of the following form:
1 2 3 4 5
0 4 6 8 10
0 0 9 12 15
0 0 0 16 20
0 0 0 0 25
Now i do like to obtain a vector with only the values of the upper triangular matrix. in other words a vector of underneath form.
[1 2 3 4 5 4 6 8 10 9 12 15 16 20 25]
What is the best way to obtain this vector?
Thanks in advance
2 Comments
Fathima Bareeda
on 5 Jun 2021
What is the best way to obtain vector in the form of diagonal elements first and then upper triangular elements..
For eg:[1 4 9 16 25 2 3 4 5 6 8 10 12 15 20]
M = [ 1 2 3 4 5
0 4 6 8 10
0 0 9 12 15
0 0 0 16 20
0 0 0 0 25
]
D = diag(M);
eg = [D.', squareform((M-diag(D)).')]
Accepted Answer
More Answers (1)
Witold Waldman
on 25 Apr 2024
Edited: Witold Waldman
on 25 Apr 2024
A=[
1 2 3 4 5
0 4 6 8 10
0 0 9 12 15
0 0 0 16 20
0 0 0 0 25
];
% The following previously submitted code creates two intermediate
% matrices, At and m, in addition to the solution array v.
tic
At = A.';
m = tril(true(size(At)));
v = At(m).';
toc
v
% The following code does not create any intermediate matrices.
% It might be preferred when dealing with very large matrices.
% In testing, this code was the slower of the two.
tic
nA = size(A,1);
ibeg = 1;
for n = 1:nA
iend = ibeg+nA-n;
v(ibeg:iend) = A(n,n:nA);
ibeg = iend+1;
end
toc
v
Categories
Find more on Operating on Diagonal Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!