# Removing empty cells from cell array

9 views (last 30 days)
Joel Schelander on 26 Mar 2021
Commented: Joel Schelander on 26 Mar 2021
G is a cell array:
G={16x16 cell 16x16 cell 16x16 cell 16x16 cell 16x16 cell 16x16 cell}
Each cell look like this: G{1}=[1 [] 3 ; 4 [] 7]; (but 16x16)
I want to remove these empty cells []. I have tried
index = cellfun(@isempty, G) == 0;
Gnew = G(index)
Without success. How can I solve this?
##### 2 CommentsShowHide 1 older comment
Joel Schelander on 26 Mar 2021
It is the output of several for loops, looks like this (see attached mat file)

Stephen23 on 26 Mar 2021
Edited: Stephen23 on 26 Mar 2021
Most likely converting the nested cell array to numeric arrays is going to make processing your data easier:
GUD = S.GUD
GUD = 1×6 cell array
{16×16 cell} {16×16 cell} {16×16 cell} {16×16 cell} {16×16 cell} {16×16 cell}
GUD{1}
ans = 16×16 cell array
{0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 4.1165]} {[ 5.8874]} {[ 5.8474]} {0×0 double} {[ 5.8874]} {[ 4.5514]} {[ 6.3844]} {0×0 double} {[ 5.8474]} {[ 6.3844]} {[ 4.4562]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 5.8874]} {[ 6.3844]} {0×0 double} {0×0 double} {[ 6.3844]} {[ 5.8474]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 5.8874]} {0×0 double} {[ 6.3844]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 6.3844]} {0×0 double} {[ 6.3844]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 5.8474]} {[ 6.3844]} {0×0 double} {0×0 double} {[ 6.3844]} {[ 6.3844]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 5.8874]} {[ 6.3844]} {0×0 double} {0×0 double} {[ 6.3844]} {[ 5.8474]} {[ 4.1165]} {0×0 double} {[ 5.8874]} {[ 5.8474]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 5.8874]} {0×0 double} {[ 4.2759]} {[ 5.8416]} {[ 5.8474]} {0×0 double} {[ 5.8416]} {[ 4.3722]} {[ 5.8874]} {0×0 double} {0×0 double} {[ 6.3844]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 6.3844]} {0×0 double} {0×0 double} {[ 5.8416]} {[ 5.8474]} {0×0 double} {[ 6.3844]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 6.3844]} {0×0 double} {[ 5.8416]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 5.8874]} {0×0 double} {[ 6.3844]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 6.3844]} {0×0 double} {[ 6.3844]} {[ 5.8874]} {0×0 double} {0×0 double} {[ 6.3844]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 6.3844]} {0×0 double} {0×0 double} {[ 5.8416]} {[ 4.5514]} {[ 5.8874]} {0×0 double} {[ 6.3844]} {[ 5.8874]} {[ 4.2759]} {0×0 double} {[ 5.8416]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 6.3844]} {[ 5.8416]} {0×0 double} {[ 4.7729]} {[ 6.3844]} {[ 6.3844]} {0×0 double} {0×0 double} {[ 6.3844]} {[ 5.8416]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 5.8474]} {[ 6.3844]} {0×0 double} {0×0 double} {[ 6.3844]} {[ 6.3844]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 5.8474]} {0×0 double} {[ 6.3844]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 6.3844]} {0×0 double} {[ 5.8416]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 6.3844]} {[ 6.3844]} {0×0 double} {0×0 double} {[ 6.3844]} {[ 5.8416]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {[ 4.4562]} {[ 5.8474]} {[ 6.3844]} {0×0 double} {[ 5.8474]} {[ 4.3722]} {[ 5.8416]} {0×0 double} {[ 6.3844]} {[ 5.8416]} {[ 4.7729]} {0×0 double} {0×0 double} {0×0 double} {0×0 double} {0×0 double}
Convert:
for k = 1:numel(GUD)
idx = ~cellfun(@isempty,GUD{k});
tmp = zeros(size(GUD{k})); % or perhaps NAN.
tmp(idx) = [GUD{k}{idx}];
GUD{k} = tmp;
end
Checking:
GUD
GUD = 1×6 cell array
{16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double} {16×16 double}
GUD{1}
ans = 16×16
0 0 0 0 0 4.1165 5.8874 5.8474 0 5.8874 4.5514 6.3844 0 5.8474 6.3844 4.4562 0 0 0 0 0 0 0 0 0 0 5.8874 6.3844 0 0 6.3844 5.8474 0 0 0 0 0 5.8874 0 6.3844 0 0 0 0 0 6.3844 0 6.3844 0 0 0 0 0 5.8474 6.3844 0 0 6.3844 6.3844 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5.8874 6.3844 0 0 6.3844 5.8474 4.1165 0 5.8874 5.8474 0 0 0 0 5.8874 0 4.2759 5.8416 5.8474 0 5.8416 4.3722 5.8874 0 0 6.3844 0 0 0 0 0 0 0 0 6.3844 0 0 5.8416 5.8474 0 6.3844 0 0 0 0 0 6.3844 0 5.8416 0 0 0 0 0 0 0 0 0 0 5.8874 0 6.3844 0 0 0 0 0 6.3844 0 6.3844 5.8874 0 0 6.3844 0 0 0 0 0 0 0 0 6.3844 0 0 5.8416
If you really want to keep the (very inefficient and difficult to work with) nested cell arrays containing scalar numerics, then something like this:
for k = 1:numel(GUD)
idx = ~cellfun(@isempty,GUD{k});
GUD{k}(idx) = {0};
end
Joel Schelander on 26 Mar 2021
That really worked! Thank you!

R2019a

### Community Treasure Hunt

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

Start Hunting!