如何在 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)
时,我得到了结果,但作为一个单元格中的一个单元格,这不是我的要求。
您不能直接分配给 abc
的 2:3
列,因为 cellfun
的输出与预期的维度不匹配。它是 3 x 1
而 abc(:,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]);
我有一个如下所示的元胞数组:
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)
时,我得到了结果,但作为一个单元格中的一个单元格,这不是我的要求。
您不能直接分配给 abc
的 2:3
列,因为 cellfun
的输出与预期的维度不匹配。它是 3 x 1
而 abc(:,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]);