How to extract the upper diagonal part of a matrix into a 1 dimensional vector ?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Tuong Nguyen Minh
el 6 de Jun. de 2020
Respondida: Image Analyst
el 6 de Jun. de 2020
Dear Matlab user community
I have a K by K matrix like this for example when K = 3
A =
1 2 3
4 5 6
7 8 9
A =
1 2 3
4 5 0
7 8 9
A =
1 0 3
4 5 0
7 8 9
I would like to extract the value of [2 3 6] , [2 3 0] and [0 3 0] in this order .
My attemp was terribly inefficient
function result = flat_alpha(A)
K = size(A,1);
result = [];
for ii = 1:K
for jj = 1:K
if ii<jj
result = [result A(ii,jj)];
end
end
end
end
Could you kindly help me solve this problem ?
Thank you very much for your enthusiasm !
0 comentarios
Respuesta aceptada
David Hill
el 6 de Jun. de 2020
If A will always be a 3x3, then
B=A([4 7 8]);
3 comentarios
David Hill
el 6 de Jun. de 2020
If the order does not matter:
B=[];
for k=1:length(A)-1
B=[B,diag(A,k)'];
end
David Hill
el 6 de Jun. de 2020
Same order as you specified
B=[];
for k=1:length(A)-1
B=[B,A(k,k+1:end)];
end
Más respuestas (1)
Image Analyst
el 6 de Jun. de 2020
Try triu():
% Set up
K = 3;
A = reshape(1:K^2, K, K)'
% Solution:
upperTriangle = triu(A, 1)
oneDVector = upperTriangle(upperTriangle~=0)
You get [2;3;6] as requested.
I'm not sure what your rules are for getting the second and third version of your A matrix.
0 comentarios
Ver también
Categorías
Más información sobre Linear Algebra en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!