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 件のコメント

Stephen23
Stephen23 2021 年 3 月 26 日
"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 2021 年 3 月 26 日
It is the output of several for loops, looks like this (see attached mat file)

サインインしてコメントする。

 採用された回答

Stephen23
Stephen23 2021 年 3 月 26 日
編集済み: Stephen23 2021 年 3 月 26 日

0 投票

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

1 件のコメント

Joel Schelander
Joel Schelander 2021 年 3 月 26 日
That really worked! Thank you!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange で Creating and Concatenating Matrices についてさらに検索

製品

リリース

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by