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

 Respuesta aceptada

Aurelien Queffurust
Aurelien Queffurust el 25 de En. de 2012
To remove empty cell array contents (title of your question) :
R(~cellfun('isempty',R))

12 comentarios

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

Iniciar sesión para comentar.

Más respuestas (1)

David Young
David Young el 25 de En. de 2012
Rnew = R(~cellfun(@isempty, R))

3 comentarios

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

Iniciar sesión para comentar.

Categorías

Más información sobre Operators and Elementary Operations en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 25 de En. de 2012

Comentada:

Jan
el 9 de Mayo de 2017

Community Treasure Hunt

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

Start Hunting!

Translated by