2014-04-01 60 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