sorting without moving NaNs
    10 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Sebastiano delre
 il 20 Dic 2013
  
    
    
    
    
    Commentato: Image Analyst
      
      
 il 20 Dic 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.
0 Commenti
Risposta accettata
  Jos (10584)
      
      
 il 20 Dic 2013
        
      Modificato: Jos (10584)
      
      
 il 20 Dic 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 Commento
  Image Analyst
      
      
 il 20 Dic 2013
				Sebastiano's "Answer" moved here since it's a comment, not an answer:
Thanks a lot, it works perfectly!
Più risposte (4)
  Jos (10584)
      
      
 il 20 Dic 2013
        
      Modificato: Jos (10584)
      
      
 il 20 Dic 2013
  
      A=[20 10 NaN 66 NaN 12]
B = sort(A,'descend')
A(~isnan(A)) = B(~isnan(B))
0 Commenti
  Azzi Abdelmalek
      
      
 il 20 Dic 2013
        
      Modificato: Azzi Abdelmalek
      
      
 il 20 Dic 2013
  
      A=[20 10 NaN 66 NaN 12] 
idx=~isnan(A); 
B=sort(A,'descend');
B(isnan(B))=[];
A(idx)=B
0 Commenti
  Jan
      
      
 il 20 Dic 2013
        
      Modificato: Jan
      
      
 il 20 Dic 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 Commento
  Jos (10584)
      
      
 il 20 Dic 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 ;
Vedere anche
Categorie
				Scopri di più su Logical in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!