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

 Akzeptierte Antwort

Aurelien Queffurust
Aurelien Queffurust am 25 Jan. 2012

52 Stimmen

To remove empty cell array contents (title of your question) :
R(~cellfun('isempty',R))

12 Kommentare

Aurelien Queffurust
Aurelien Queffurust am 25 Jan. 2012
Note : Using isempty between quotes is faster than using function handles @isempty
Jim O'Doherty
Jim O'Doherty am 25 Jan. 2012
Excellent, makes me feel a little stupid for asking, but thank you very much
Jim
David Young
David Young am 25 Jan. 2012
In 2011b, the documentation for cellfun only mentions the string syntax under "backward compatibility".
Chris Volpe
Chris Volpe am 5 Okt. 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 am 5 Okt. 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 am 1 Mär. 2017
>> data(~structfun('isempty',data))
Error using structfun
First input must be a function handle.
Stephen23
Stephen23 am 2 Mär. 2017
Bearbeitet: Stephen23 am 2 Mär. 2017
@Daniel Bridges: that syntax is only in the cellfun documentation. It is not supported by other functions.
Thulfiqar Hussein
Thulfiqar Hussein am 9 Mär. 2017
R = R(~cellfun('isempty',R))
Prateek Srivastava
Prateek Srivastava am 9 Mär. 2017
Not able to find out
Prateek Srivastava
Prateek Srivastava am 9 Mär. 2017
How to remove null values from cell
Chintan Modi
Chintan Modi am 9 Mai 2017
Bearbeitet: Chintan Modi am 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, :))

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

David Young
David Young am 25 Jan. 2012

10 Stimmen

Rnew = R(~cellfun(@isempty, R))

3 Kommentare

Harold
Harold am 25 Apr. 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 am 25 Apr. 2012
D1 = D.';
out = reshape(D1(~cellfun(@isempty,D1)),2,[])';
Daniel Bridges
Daniel Bridges am 1 Mär. 2017
>> data(~structfun(@isempty,data))
Error using structfun
Inputs to STRUCTFUN must be scalar structures.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Operators and Elementary Operations finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by