How to extract the upper diagonal part of a matrix into a 1 dimensional vector ?
조회 수: 1 (최근 30일)
이전 댓글 표시
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
채택된 답변
David Hill
2020년 6월 6일
If A will always be a 3x3, then
B=A([4 7 8]);
댓글 수: 3
David Hill
2020년 6월 6일
If the order does not matter:
B=[];
for k=1:length(A)-1
B=[B,diag(A,k)'];
end
David Hill
2020년 6월 6일
Same order as you specified
B=[];
for k=1:length(A)-1
B=[B,A(k,k+1:end)];
end
추가 답변 (1개)
Image Analyst
2020년 6월 6일
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
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!