how to remove empty cell array contents?

Hello, I've got a cell array, lets say:
R =
[ 691x2 double]
[]
[]
[]
[]
[ 12x2 double]
[ 11x2 double]
[]
[]
[ 112x2 double]
[ 13x2 double]
Does anyone know of a quick way I could remove the non-zero elements of the cell array? This cell array will be a different length and will have a different number of non-zero elements each time, dependent on another loop
Thanks, Jim

 Réponse acceptée

Aurelien Queffurust
Aurelien Queffurust le 25 Jan 2012
To remove empty cell array contents (title of your question) :
R(~cellfun('isempty',R))

12 commentaires

Aurelien Queffurust
Aurelien Queffurust le 25 Jan 2012
Note : Using isempty between quotes is faster than using function handles @isempty
Jim O'Doherty
Jim O'Doherty le 25 Jan 2012
Excellent, makes me feel a little stupid for asking, but thank you very much
Jim
David Young
David Young le 25 Jan 2012
In 2011b, the documentation for cellfun only mentions the string syntax under "backward compatibility".
Chris Volpe
Chris Volpe le 5 Oct 2012
Why is using a quoted function name faster than using a function handle? I would have thought that the first thing cellfun did with a quoted name would be to parse it and cache a function handle.
Jan
Jan le 5 Oct 2012
Here 'isempty' is not a quoted function name, but a simple string. The C-implementation of CELLFUN checks the strings mentioned in the documentation and performs the corresponding operations directly. This is much faster than calling a Matlab function for each cell element.
It is very sad, that the fast and efficient string commands are mentioned in the docs as "backward compatibility" only.
Btw, the C-source has been included in the toolbox functions of Matlab 6.5. It was a very good example for the efficient processing of cell elements in a Mex function.
Daniel Bridges
Daniel Bridges le 1 Mar 2017
>> data(~structfun('isempty',data))
Error using structfun
First input must be a function handle.
Stephen23
Stephen23 le 2 Mar 2017
Modifié(e) : Stephen23 le 2 Mar 2017
@Daniel Bridges: that syntax is only in the cellfun documentation. It is not supported by other functions.
Thulfiqar Hussein
Thulfiqar Hussein le 9 Mar 2017
R = R(~cellfun('isempty',R))
Prateek Srivastava
Prateek Srivastava le 9 Mar 2017
Not able to find out
Prateek Srivastava
Prateek Srivastava le 9 Mar 2017
How to remove null values from cell
Chintan Modi
Chintan Modi le 9 Mai 2017
Modifié(e) : Chintan Modi le 9 Mai 2017
I am also suffering from this problem. I want to delete the empty cells from this "sf" variable (i.e. shown in picture). I wish to delete it from variable so that whenever I try to find column size of the particular row; i'll be able to get only the matrix of that number cell and don't want to count the empty cell. for e.g. if i write
size(sf(3,:),2)
ans i want i.e. 5
but here it shows the 31
can someone help me to solve this problem?
@Chintan Modi: Use the flags to catch the attraction to inapropriate messages, not for posting data concerning your problem.
Please do not attach a new question as a comment to an existing answer. Open a new thread instead.
There is no picture. What is the type of your variable sf? size(sf(3,:),2) replies the size of the array and does not care about the contents of the cell elements.
If you want to count the non-empty cells, use:
sum(~cellfun('isempty', sf(3, :))

Connectez-vous pour commenter.

Plus de réponses (1)

David Young
David Young le 25 Jan 2012
Rnew = R(~cellfun(@isempty, R))

3 commentaires

Harold
Harold le 25 Avr 2012
I'm also trying to remove empty cells from a matrix but I can't figure out how to maintain the order for each row and column.
D=
{[-24.7697910000000,-15.8191235000000],[],[-12.6771670000000,20.4587480000000],[];[],[-20.6771670000000,-3.54125200000000],[-11.9803417500000,-14.5401785500000],[];[],[-20.6771670000000,-3.54125200000000],[4.32283300000000,-1.04125200000000],[];[],[13.0196582500000,-12.0401785500000],[],[-24.7697910000000,-15.8191235000000];[-11.9803417500000,-14.5401785500000],[],[4.32283300000000,-1.04125200000000],[];[],[-12.6771670000000,20.4587480000000],[],[13.0196582500000,-12.0401785500000]}:
I need
[-24.7697910000000,-15.8191235000000] [-12.6771670000000,20.4587480000000]
[-20.6771670000000,-3.54125200000000] [-11.9803417500000,-14.5401785500000]
[-20.6771670000000,-3.54125200000000] [4.32283300000000,-1.04125200000000]
[13.0196582500000,-12.0401785500000] [-24.7697910000000,-15.8191235000000]
[-11.9803417500000,-14.5401785500000] [4.32283300000000,-1.04125200000000]
[-12.6771670000000,20.4587480000000] [13.0196582500000,-12.0401785500000]
Andrei Bobrov
Andrei Bobrov le 25 Avr 2012
D1 = D.';
out = reshape(D1(~cellfun(@isempty,D1)),2,[])';
Daniel Bridges
Daniel Bridges le 1 Mar 2017
>> data(~structfun(@isempty,data))
Error using structfun
Inputs to STRUCTFUN must be scalar structures.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Operators and Elementary Operations dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by