2015-05-14 218 views
1

我有,d是一個字符串Matlab的:轉換單元的單元陣列到單個單元陣列

的不匹配的單元陣列的單元陣列
A = 

{'abc'; 

'acd' ; 

'aaa'} 


B = 

{'baa' ; 

'bbb'} 


C = 

{'acc'; 

'aaa'; 

'aad'} 

D = { {A}, {B}, {C}} 

A,B和C是在大小不同和我不首先知道它們的大小,所以我將它們合併爲D.如何將D轉換爲單個單元格陣列,以便我可以將它們寫入Excel表單中?

D = 
{'abc' 'baa' 'acc'; 

'acd' 'bbb' 'aaa'; 

'aaa' ' ' 'aad'} 
+0

因此,在期望的輸出中,假設我們開始在Excel中將D寫入A1,A1將是'abc',B3將是''? – brodoll

+0

謝謝你的回覆。 B3將是空的。 – Cheng

回答

1

你可以讓MATLAB擴展單元陣列需要的時候:

F={}; 
for k = 1:numel(D), 
    F(1:numel(D{k}), end+1)=D{k}; 
end 

導致

F = 
    'abc' 'baa' 'acc' 
    'acd' 'bbb' 'aaa' 
    'aaa'  [] 'aad' 

如果有空矩陣作爲空是很重要的字符串,使用

>> F(cellfun('isempty', F))={''} 
F = 
    'abc' 'baa' 'acc' 
    'acd' 'bbb' 'aaa' 
    'aaa' ''  'aad' 
+0

完美!謝謝! – Cheng

0

這將是一個量化的方法 -

D = { {A}, {B}, {C}} %// Code from question (not tinkering with it) 

%// Extract all cells data at each cell index position. 
%// In other words, reduce level of cell data storage by one step. 
D1 = vertcat(D{:}) 

%// Get lengths of each cell 
lens = cellfun('length',D1) 

%// Initialize output cell array 
out_cell = cell(max(lens),numel(lens)) 

%// Mask of valid cell positions in the output 
mask = bsxfun(@le,[1:max(lens)]',lens(:).') 

%// Store concatenated cell data into masked positions in output 
out_cell(mask) = vertcat(D1{:}) 

採樣運行 -

​​

請注意,你可以完全避免產生D,如果你這樣做,在開始 -

D1 = {A,B,C}