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

时间:2016-05-17 13:43:23

标签: matlab cell-array

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

例如

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

有人可以帮忙吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

什么是

  

将每个单元格按列扩展为其成分双精度

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

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]}

这是对你问题的另一个有效解释。