【问题标题】:Matlab: 2D cell array to char arrayMatlab:二维单元格数组到字符数组
【发布时间】:2014-04-01 09:42:42
【问题描述】:

我想知道是否有一种很好的方法可以将我的二维元胞数组转换为二维字符矩阵。

元胞数组如下所示:

'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(),但它并不关心元胞数组是二维的,只是为元胞数组中的每个元素创建一行。

编辑:如果有人想取回串联行的单元格数组,请查看Combine Columns of Cell Array Matlab

非常感谢!

【问题讨论】:

    标签: matlab cell-array


    【解决方案1】:

    好吧,char 让你在其中完成了一部分,剩下的就是通过 reshape 等搞砸了:

    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   
    

    【讨论】:

    • 是的,这会起作用,谢谢 :) 仍然希望有更干净的东西,没有循环,呵呵。
    【解决方案2】:

    我只能在匹配使用简单循环指定的格式时看到如何做到这一点,如果格式不重要,使用 char 和 reshape 就像 nkjt 所做的那样是我能看到的最好的......

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

    使用str2mat 按列将每一列连接成一个(填充的)字符数组,添加一个尾随空格,然后添加到输出中。

    结果:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-12
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多