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일

2 개 추천

% 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일

0 개 추천

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));

카테고리

도움말 센터File Exchange에서 Operators and Elementary Operations에 대해 자세히 알아보기

태그

질문:

2021년 1월 8일

편집:

Jan
2021년 1월 8일

Community Treasure Hunt

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

Start Hunting!

Translated by