2016-05-17 56 views
0

我有一个单元格不等大小的双元素。在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]; 

可能有人请帮忙吗?

谢谢!

+1

你期望你的输出是什么样的?你想用零填充吗? – Suever

+0

有零填充是好的,但我希望他们扩大coulmnwise! –

回答

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

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

+0

我想E = [1,2,3; 4,0,0; ​​5,6,0]; –

+1

@EyesOfÖzil请加上您的问题。此外,我的答案更新了代码。 – Dan

+0

是的,这就是我一直在寻找的。谢谢! –