Combining cell arrays with empty doubles

3 Ansichten (letzte 30 Tage)
Michael Stollenwerk
Michael Stollenwerk am 8 Jan. 2021
Bearbeitet: Jan am 8 Jan. 2021
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

Akzeptierte Antwort

Stephen23
Stephen23 am 8 Jan. 2021
Bearbeitet: Stephen23 am 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]}

Weitere Antworten (1)

Jan
Jan am 8 Jan. 2021
Bearbeitet: Jan am 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));

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by