Removing empty cells from cell array

5 visualizaciones (últimos 30 días)
Joel Schelander
Joel Schelander el 26 de Mzo. de 2021
Comentada: Joel Schelander el 26 de Mzo. de 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 comentarios
Stephen23
Stephen23 el 26 de Mzo. de 2021
"Each cell look like this: G{1}=[1 [] 3 ; 4 [] 7]; "
I doubt that, as numeric arrays must be rectangular and cannot contain "holes":
[1,[],3;4,[],7]
ans = 2×2
1 3 4 7
Please upload some sample data in a mat file by clicking on the paperclip button.
Joel Schelander
Joel Schelander el 26 de Mzo. de 2021
It is the output of several for loops, looks like this (see attached mat file)

Iniciar sesión para comentar.

Respuesta aceptada

Stephen23
Stephen23 el 26 de Mzo. de 2021
Editada: Stephen23 el 26 de Mzo. de 2021
Most likely converting the nested cell array to numeric arrays is going to make processing your data easier:
S = load('G.mat');
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

Más respuestas (0)

Categorías

Más información sobre Data Type Identification en Help Center y File Exchange.

Productos


Versión

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by