Extract first non-NaN of each row without loop

조회 수: 3(최근 30일)
Dave 2021년 10월 24일
댓글: Dave 2021년 10월 24일
Hello, from a matrix where each row contains at least one non-NaN, is there away to extract the FIRST non-nan of each row without using a loop?
A=[NaN,444,NaN,NaN,41;
NaN,NaN,NaN,222,NaN;
NaN,NaN,554,554,NaN;
125,747,21,NaN,4;
NaN,NaN,NaN,43,NaN;
NaN,98,NaN,75,NaN;
NaN,22,NaN,NaN,NaN]
From matrix A, I would like to arrive to B
B=[444;222;554;125;43;98;22]
Thanks
댓글 수: 1표시숨기기 없음
Dave 2021년 10월 24일
I am able to do it one row at a time, for example for the last row
A(7,find(~isnan(A(7,:)), 1, 'first'))
But without a loop I cannot do it for all rows

댓글을 달려면 로그인하십시오.

채택된 답변

Walter Roberson 2021년 10월 24일
A=[NaN,444,NaN,NaN,41;
NaN,NaN,NaN,222,NaN;
NaN,NaN,554,554,NaN;
125,747,21,NaN,4;
NaN,NaN,NaN,43,NaN;
NaN,98,NaN,75,NaN;
NaN,22,NaN,NaN,NaN]
A = 7×5
NaN 444 NaN NaN 41 NaN NaN NaN 222 NaN NaN NaN 554 554 NaN 125 747 21 NaN 4 NaN NaN NaN 43 NaN NaN 98 NaN 75 NaN NaN 22 NaN NaN NaN
B = A(sub2ind(size(A), (1:size(A,1)).', sum(cumprod(isnan(A),2),2)+1))
B = 7×1
444 222 554 125 43 98 22
댓글 수: 1표시숨기기 없음
Dave 2021년 10월 24일
Danke

댓글을 달려면 로그인하십시오.

Community Treasure Hunt

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

Start Hunting!

Translated by