How to merge adjacent NaN values into single NaN value in a vector?
    3 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Mr M.
      
 el 1 de Jul. de 2018
  
I have [1 2 3 NaN NaN 0 1 2 NaN 9 8 7 6 NaN NaN NaN 1 1] anf I want [1 2 3 NaN 0 1 2 NaN 9 8 7 6 NaN 1 1] without a for cycle. Are there any trick to do this?
1 comentario
  Stephen23
      
      
 el 1 de Jul. de 2018
				@Mr M: please remember to accept answers or provide feedback on your earlier questions:
Respuesta aceptada
  Stephen23
      
      
 el 1 de Jul. de 2018
        
      Editada: Stephen23
      
      
 el 3 de Jul. de 2018
  
      No loops required, no tricks required, just basic MATLAB indexing:
old = [1 2 3 NaN NaN 0 1 2 NaN 9 8 7 6 NaN NaN NaN 1 1];
idx = ~isnan(old);
new = old(idx | [true,idx(1:end-1)]);
3 comentarios
  Stephen23
      
      
 el 3 de Jul. de 2018
				
      Editada: Stephen23
      
      
 el 3 de Jul. de 2018
  
			@Mr M.: you are right. It is easy to fix, just exchange the false for true:
>> old = [NaN,NaN,NaN,1,2,3,NaN,NaN,0,1,2,NaN,9,8,7,6,NaN,NaN,NaN]
old =
   NaN   NaN   NaN     1     2     3   NaN   NaN     0     1     2   NaN     9     8     7     6   NaN   NaN   NaN
>> idx = ~isnan(old);
>> new = old(idx | [true,idx(1:end-1)])
new =
   NaN     1     2     3   NaN     0     1     2   NaN     9     8     7     6   NaN
Más respuestas (1)
  Andrei Bobrov
      
      
 el 2 de Jul. de 2018
        a = [1 2 3 NaN NaN 0 1 2 NaN 9 8 7 6 NaN NaN NaN 1 1];
lo = ~isnan(a);
lo(strfind(lo,[0 1])) = true;
out = a(lo);
0 comentarios
Ver también
Categorías
				Más información sobre Logical en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


