Ignore NaN values when sorting
25 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Marco Sartori
am 22 Jul. 2020
Kommentiert: Walter Roberson
am 22 Jul. 2020
Good afternoon everybody!
I have a matrix of the type:
A = [10 NaN 20 NaN]
and I want to put a rank in ascending order to these values but, if there is a NaN value, it is ignored or set equal to 0.
For instance, the result can be:
rank = [1 0 2 0]
It would be awesome if you can help me with this enigma.
Thank you!
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 22 Jul. 2020
validmask = ~isnan(A);
[~, nonnanrank] = sort(A(validmask));
rank = zeros(size(A));
rank(validmask) = nonnanrank;
However I recommand that you use a different variable name rather than rank to avoid interfering with using the MATLAB function rank() . rank() is used less frequently than sum() or length() are, so this is perhaps less of an issue than using those variables would be.
3 Kommentare
Walter Roberson
am 22 Jul. 2020
The easiest way would probably be to work column by column.
I can think of a vectorized algorithm, but it involves some sub2ind() tricks that are less than clear to read. Sometimes it just isn't worth doing unless your arrays are large enough that performance gets really important but at the same time not so large that the extra memory needed for vectorization is not a factor.
Weitere Antworten (1)
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!