how to find a number in cell and make it NaN?
    9 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
I have a cell matrix with size 1165x1 cell. In each cell there is one value i.e. number 31 that needs to be found and made NaN.
For example:
A = {[1,2],[3,4],[5 31], [31,6]};
I would like to make 31 = NaN where ever it is seen. Just like matrix B:
B = {[1,2],[3,4],[5 NaN], [NaN,6]};
Any help is greatly appriciated.
0 comentarios
Respuesta aceptada
  Jan
      
      
 el 9 de Ag. de 2022
        
      Editada: Jan
      
      
 el 9 de Ag. de 2022
  
      Start with a simple loop:
A = {[1,2], [3,4], [5 31], [31,6]};
B = A;
for k = 1:numel(B)
    b = B{k};
    m = (b == 31);
    if any(m)
        b(m) = NaN;
        B{k} = b;
    end
end
This can be condensed into a cellfun method:
p = [1, NaN];
B = cellfun(@(a) a .* p((a == 31) + 1), A, 'UniformOutput', 0)
0 comentarios
Más respuestas (2)
  Manas Shivakumar
 el 9 de Ag. de 2022
        There are several ways to do this.
1) convert to matrix, replace and convert back to cell array:
tmp = cell2mat(A);
tmp(tmp == 31) == Nan;
A = num2cell(tmp)
2)  use cellfun:
A(cellfun(@(elem) elem == 31, A)) = {Nan}
3 comentarios
  Image Analyst
      
      
 el 9 de Ag. de 2022
				Correct Nan to Nan or nan.  But still not right.  Just to illustrate:
% Method 1
A = {[1,2],[3,4],[5 31], [31,6]}
tmp = cell2mat(A);
tmp(tmp == 31) == NaN;
A = num2cell(tmp)
% Method 2:
A = {[1,2],[3,4],[5 31], [31,6]};
A(cellfun(@(elem) elem == 31, A)) = {NaN}
@Manas Shivakumar Can you try again?
  dpb
      
      
 el 9 de Ag. de 2022
				The num2cell conversion also destroys the original cell sizes by placing every element into its own cell. One would have to write something like
 mat2cell(cell2mat(A),[1],[2 2 2 2])
ans =
  1×4 cell array
    {1×2 double}    {1×2 double}    {1×2 double}    {1×2 double}
>> 
to get the original back.
Ver también
Categorías
				Más información sobre Data Type Conversion 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!