How do I detect empty cells in a cell array? I know the command to remove the empty cell is a(1) = []
, but I can't seem to get MATLAB to automatically detect which cells are empty.
Background:
I preallocated a cell array using a=cell(1,53)
.
Then I used if exist(filename(i))
and textscan to check for a file, and read it in. As a result, when the filename(i)
does not exist, an empty cell results and we move onto the next file.
When I'm finished reading in all the files, I would like to delete the empty cells of a
. I tried if a(i)==[]
Use CELLFUN
%# find empty cells
emptyCells = cellfun(@isempty,a);
%# remove empty cells
a(emptyCells) = [];
Note: a(i)==[]
won't work. If you want to know whether the the i-th cell is empty, you have to use curly brackets to access the content of the cell. Also, ==[]
evaluates to empty, instead of true
/false
, so you should use the command isempty
instead. In short: a(i)==[]
should be rewritten as isempty(a{i})
.
All above mentioned answers are incorrect, because in my case when i used them, they removed empty cells and then all elements of my cell array situated in a row manner instead of preserving their actual shape. In fact after using this kind of approach your cell array elements tend to be a row cell vector.
I have found this approach which works correctly in my case.
source : https://groups.google.com/forum/#!topic/comp.softsys.matlab/p3NX0fI6u90
approach:
myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), : ) = [];
来源:https://stackoverflow.com/questions/3400515/how-do-i-detect-empty-cells-in-a-cell-array