Combining cell arrays with empty doubles

3 views (last 30 days)
Suppose I have two cell arrays, with
a = cell(1,2);
a{1} = 1;
b = cell(1,2);
b{2} = 2;
How can I quickly combine the two to give me
1×2 cell array
{[1]} {[2]}
?
In general, I want to combine several cell arrays of the same dimension, which at a given index either either all have {0×0 double} doubles or at most one of the cell arrays does not have a {0×0 double} double.
Thanks!
Michael

Accepted Answer

Stephen23
Stephen23 on 8 Jan 2021
Edited: Stephen23 on 8 Jan 2021
% slightly more complex example data:
a = {[],1;[],[]};
b = {[],[];2,[]};
c = {[],[];[],NaN};
%
tmp = cat(3,a,b,c);
[~,idp] = sort(cellfun('isempty',tmp),3);
sz = size(tmp);
[idr,idc] = ndgrid(1:sz(1),1:sz(2));
idx = sub2ind(sz,idr,idc,idp(:,:,1));
out = tmp(idx)
out = 2x2 cell array
{0×0 double} {[ 1]} {[ 2]} {[NaN]}

More Answers (1)

Jan
Jan on 8 Jan 2021
Edited: Jan on 8 Jan 2021
Or simpler:
a = {1, []};
b = {[], 2};
c = cat(2, a, b);
c = c(~cellfun('isempty', c));
% Or:
fullCell = @(x) x(~cellfun('isempty', x));
c = cat(2, fullCell(a), fullCell(b));

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!