sorting without moving NaNs

8 visualizaciones (últimos 30 días)
Sebastiano delre
Sebastiano delre el 20 de Dic. de 2013
Comentada: Image Analyst el 20 de Dic. de 2013
How can I sort an array without moving the NaN elements?
I have A=[20 10 NaN 66 NaN 12] and I would like to get A=[66 20 NaN 12 NaN 10]. Thank you for your help. Alessio.

Respuesta aceptada

Jos (10584)
Jos (10584) el 20 de Dic. de 2013
Editada: Jos (10584) el 20 de Dic. de 2013
Use a variant of the same trick:
A=[6 20; 10 10; 3 NaN; 20 66; 4 NaN; 7 12]
B = flipud(sortrows(A,[2 1])) ; % descending sortrows based on 2nd column
A(~isnan(A(:,2)),:) = B(~isnan(B(:,2)),:)
  1 comentario
Image Analyst
Image Analyst el 20 de Dic. de 2013
Sebastiano's "Answer" moved here since it's a comment, not an answer:
Thanks a lot, it works perfectly!

Iniciar sesión para comentar.

Más respuestas (4)

Jos (10584)
Jos (10584) el 20 de Dic. de 2013
Editada: Jos (10584) el 20 de Dic. de 2013
A=[20 10 NaN 66 NaN 12]
B = sort(A,'descend')
A(~isnan(A)) = B(~isnan(B))

Azzi Abdelmalek
Azzi Abdelmalek el 20 de Dic. de 2013
Editada: Azzi Abdelmalek el 20 de Dic. de 2013
A=[20 10 NaN 66 NaN 12]
idx=~isnan(A);
B=sort(A,'descend');
B(isnan(B))=[];
A(idx)=B

Jan
Jan el 20 de Dic. de 2013
Editada: Jan el 20 de Dic. de 2013
If A is large and contains a lot of NaN's, excluding them from the sorting can save some time:
A = [20 10 NaN 66 NaN 12]
idx = ~isnan(A);
A(idx) = sort(A(idx), 'descend');
  1 comentario
Jos (10584)
Jos (10584) el 20 de Dic. de 2013
I doubt that excluding NaNs is faster, Jan. Increasing the proportion of NaNs seems to have little effect, or even a positive effect sometimes:
a = randperm(1e7) ; a(a(1:1e1)) = NaN ; tic ; sort(a) ; toc ;
a = randperm(1e7) ; a(a(1:1e5)) = NaN ; tic ; sort(a) ; toc ;

Iniciar sesión para comentar.


Sebastiano delre
Sebastiano delre el 20 de Dic. de 2013
I am sorry. Actually I wrongly state my problem. I have A=[6 20; 10 10; 3 NaN; 20 66; 4 NaN; 7 12] and I would like to get A=[20 66; 6 20; 3 NaN; 7 12; 4 NaN; 10 10]. This means I would like to sort the rows of the matrix in a descending order based on the second column and without moving the rows with the NaN elements in the second column. I would like to use sortrows. Sorry again. Alessio.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by