在 matlab 中按列扩展单元格元素

Expand cell elements column wise in matlab

我有一个包含大小不等的双元素的单元格。

例如

cc2 = 
[1x32 double]    
[1x3 double]    
[1x3 double]
[1x2 double]    
[1x457 double]    
[1x200 double]
[1x23 double]              
[1x10 double]
.
.    
[so on]

每个单元格元素是 1xn 其中 n>=2

我想将每个单元格元素按列扩展到它的组成双打中。

我尝试过类似的方法,但这不起作用

lens = sum(cellfun('length',cc2(:,1)),2);
out = zeros(numel(lens),max(lens));
out(bsxfun(@le,[1:max(lens)],lens)) = horzcat(cc2{:});

单个元素按行扩展,但我需要它们按列扩展。

例如

input = {[1,2,3];[4];[5,6]};
output = [1,2,3;4,0,0;5,6,0];

有人可以帮忙吗?

谢谢!

什么是

expand each cell element column-wise into its constituent doubles

是什么意思?您能否提供示例输入和输出。例如,如果您的输入是

C = {[1,2,3];
     [4];
     [5,6]}

那你想要输出什么?

如果你想要这个

E = [1,2,3,4,5,6]

然后尝试

E = [C{:}]

如果你愿意

E = [1,2,3;
     4,0,0;
     5,6,0]

然后尝试类似于 this answer 的操作:

n = max(cellfun(@(x)size(x,2),C))
Ecell = cellfun(@(x)[x, zeros(1,n-numel(x))], C, 'uni', 0);
E = cat(1,E{:})

请注意,上面代码中的 Ecell 将等于

Ecell == {[1,2,3];
          [4,0,0];
          [5,6,0]}

这是对您的问题的另一种有效解释。