Azzera filtri
Azzera filtri

Extract first non-NaN of each row without loop

8 visualizzazioni (ultimi 30 giorni)
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 Commento
Dave
Dave il 24 Ott 2021
Modificato: Dave il 24 Ott 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

Accedi per commentare.

Risposta accettata

Walter Roberson
Walter Roberson il 24 Ott 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

Più risposte (0)

Community Treasure Hunt

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

Start Hunting!

Translated by