2014-04-01 59 views
0

我想知道是否有一種很好的方式,可以將我的2D單元格陣列轉換爲2D char矩陣。Matlab:2D單元格陣列到字符陣列

單元陣列看起來像這樣:

'test' 'me' '0'  '22' 
'tester' 'me' '14' '241' 
'test' 'you' '25' '1' 

現在我希望把列之間的空間,使整個事情字符數組。意思是我想無論是這樣的:

'test me 0 22 ' 
'tester me 14 241' 
'test you 25 1 ' 

或本

'test me 0 22' 
'tester me 14 241' 
'test you 25 1' 

你能幫助我嗎? 我試過char()但它並不在意單元格數組是2D,而只是爲單元格數組中的每個元素創建一行。

編輯:如果有人想回去級聯行的單元陣列看看這個Combine Columns of Cell Array Matlab

非常感謝!

回答

2

好,char讓你的方式部分出現,而一些與重塑等瞎沒有休息:

out = char(C'); 
out(:,end+1)=' '; 
out = reshape(out',[28,3]); 
out = out'; 

(有比你想要的也許更空格)

然而,一個更好的辦法可能是墊單元陣列內部的字符串,所以總長度爲每一行相同,則加

f = @(x) [x,' ']; 
% need at least one space after each entry 
C = cellfun(f,C,'UniformOutput',0); 
% now work out how much extra length needed 
l = cellfun(@length,C); 
l = sum(l,2); 
l = max(l)-l; 
% pad 
for n = 1:length(l) 
    C{n,end} = [C{n,end},blanks(l(n))]; 
end 

現在我們需要的是:

cell2mat(C) 

ans = 

test me 0 22  
tester me 14 241 
test you 25 1 
+0

是,將工作,謝謝:)仍然希望對沒有環的東西更清潔,嘿嘿。 – Stefan

1

我只能看到如何做到這一點,同時匹配以一個簡單的循環規定的格式,如果格式不使用炭重要,重塑爲nkjt沒有是最好的,我可以看到...

cellArray={ snip }; 

outp=[] 

for ii=1:size(cellArray,2) 
outp=[outp str2mat(cellArray(:,ii)) blanks(size(cellArray,1))']; 
end 

使用str2mat以列爲單位將每列連接成(填充)char數組,添加尾部空格,然後添加到輸出。

結果:

outp = 

test me 0 22 
tester me 14 241 
test you 25 1