Combining cell arrays with empty doubles

2 次查看(过去 30 天)
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

采纳的回答

Stephen23
Stephen23 2021-1-8
编辑:Stephen23 2021-1-8
% 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]}

更多回答(1 个)

Jan
Jan 2021-1-8
编辑:Jan 2021-1-8
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));

类别

Help CenterFile Exchange 中查找有关 Operators and Elementary Operations 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by