Remove zero entries from cell arrays
    7 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
Suppose I have a m x n cell array. Some of these cells contain a 1 x 2 matrix of values other cells contain just a zero. I want to be able to delete all cells that contain zeros and have the cell array automatically re-size when finished. If you copy and past this in the command window you can see what I'm trying to accomplish. I've tried using ismember to look for the zeros but had no luck. I'm not very good when it comes to doing operations on cells. I need this to remain a cell array also. Thanks for any help.
points = {[-24.7697910000000,-15.8191235000000],0,[-12.6771670000000,20.4587480000000],0;0,[-20.6771670000000,-3.54125200000000],[-11.9803417500000,-14.5401785500000],0;0,[-20.6771670000000,-3.54125200000000],[4.32283300000000,-1.04125200000000],0;0,[13.0196582500000,-12.0401785500000],0,[-24.7697910000000,-15.8191235000000];[-11.9803417500000,-14.5401785500000],0,[4.32283300000000,-1.04125200000000],0;0,[-12.6771670000000,20.4587480000000],0,[13.0196582500000,-12.0401785500000];}
0 comentarios
Respuesta aceptada
  Sean de Wolski
      
      
 el 23 de Abr. de 2012
        points = {[-24.7697910000000,-15.8191235000000],0,[-12.6771670000000,20.4587480000000],0;0,[-20.6771670000000,-3.54125200000000],[-11.9803417500000,-14.5401785500000],0;0,[-20.6771670000000,-3.54125200000000],[4.32283300000000,-1.04125200000000],0;0,[13.0196582500000,-12.0401785500000],0,[-24.7697910000000,-15.8191235000000];[-11.9803417500000,-14.5401785500000],0,[4.32283300000000,-1.04125200000000],0;0,[-12.6771670000000,20.4587480000000],0,[13.0196582500000,-12.0401785500000];}
p2 = num2cell(points,2);
C = cellfun(@(c)cellfun(@(x)x(x~=0),c,'uni',false),p2,'uni',false);
for ii = numel(C):-1:1
    Cc = C{ii};
    C(ii) = {Cc(cellfun(@(c)~isempty(c),Cc))};
end
Más respuestas (1)
  Jan
      
      
 el 23 de Abr. de 2012
        Another idea:
points = {[-24.7697910000000,-15.8191235000000],0, ...
          [-12.6771670000000,20.4587480000000], 0; ...
          0,[-20.6771670000000,-3.54125200000000],  ...
          [-11.9803417500000,-14.5401785500000],0; ...
          0,[-20.6771670000000,-3.54125200000000], ...
          [4.32283300000000,-1.04125200000000],0; ...
          0,[13.0196582500000,-12.0401785500000],0, ...
          [-24.7697910000000,-15.8191235000000]; ...
          [-11.9803417500000,-14.5401785500000],0, ...
          [4.32283300000000,-1.04125200000000],0; ...
          0,[-12.6771670000000,20.4587480000000],0, ...
          [13.0196582500000,-12.0401785500000]};
C = points(cellfun(@(x) ~isequal(x, 0), points));
"Automatically resize" is not unique: Should the number of rows or columns be adjusted?
C = reshape(C, size(points, 1), []);  % For equal column length
5 comentarios
  Jan
      
      
 el 25 de Abr. de 2012
				Dear Harold, I'm sure you can solve this problem by your own using the commands TRANSPOSE, RESHAPE and/or PERMUTE. The main problem is solved by the CELLFUN call, and the finetuning is up to you.
Ver también
Categorías
				Más información sobre Matrices and Arrays 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!


