Remove zero entries from cell arrays
12 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponse acceptée
Sean de Wolski
le 23 Avr 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
Plus de réponses (1)
Jan
le 23 Avr 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 commentaires
Jan
le 25 Avr 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.
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!