如何在 MATLAB 中将一个单元格元素分成两个单独的单元格元素

How to separate one cell element into two separate cell elements in MATLAB

我有一个如下所示的元胞数组:

abc = {[1,0,1,0];[1,1,0,1];[1,1,1,0]};

我想像这样将每个单元格元素分成两组:

abc(:,2) = {[1,0];[1,1];[1,1]};
abc(:,3) = {[1,0];[0,1];[1,0]};

我试过用这个语句来做:

abc(:,2:3) = cellfun(@(x) mat2cell(x,[1],[2,2]),abc(:,1),'uni',0);

但是这个语句报错如下:

Assignment has fewer non-singleton rhs dimensions than non-singleton subscripts

当我尝试将其分配给 abc(:,2) 而不是 abc(:,2:3) 时,我得到了结果,但作为一个单元格中的一个单元格,这不是我的要求。

您不能直接分配给 abc2:3 列,因为 cellfun 的输出与预期的维度不匹配。它是 3 x 1abc(:,2;3)3 x 2。不过,您可以调用 cat 使其正常工作。

abc = {[1,0,1,0];[1,1,0,1];[1,1,1,0]};

tmp = cellfun(@(x) mat2cell(x,[1],[2,2]),abc(:,1),'uni',0);
abc(:,2:3) = cat(1, tmp{:});

%// [1x4 double]    [1x2 double]    [1x2 double]
%// [1x4 double]    [1x2 double]    [1x2 double]
%// [1x4 double]    [1x2 double]    [1x2 double]

不使用 cellfun 的替代方案可能是。

abc = {[1,0,1,0];[1,1,0,1];[1,1,1,0]};

abc(:,2:3) = mat2cell(cat(1, abc{:}), ones(1,size(abc,1)), [2 2]);