Matlab:2D单元阵列到char数组

时间:2014-04-01 09:42:43

标签: matlab cell-array

我想知道是否有一种很好的方式可以将我的2D单元阵列转换为2D字符矩阵。

单元格数组如下所示:

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

现在我想在列之间放置空格并使整个事物成为一个char数组。意思是我想要这个:

'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 个答案:

答案 0 :(得分: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   

答案 1 :(得分:1)

我只能看到如何在匹配使用简单循环指定的格式的情况下执行此操作,如果使用char和reshape格式不重要,因为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