Extract first non-NaN of each row without loop

8 views (last 30 days)
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 Comment
Dave
Dave on 24 Oct 2021
Edited: Dave on 24 Oct 2021
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

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 24 Oct 2021
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

More Answers (0)

Categories

Find more on Simulation 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!