2016-05-17 70 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

是的,這就是我一直在尋找的。謝謝! –