【问题标题】:Matlab: Convert cell array of cells into a single cell arrayMatlab:将单元格数组转换为单个单元格数组
【发布时间】:2015-05-14 12:14:47
【问题描述】:

我有,D 是不匹配的字符串元胞数组的元胞数组

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'}

【问题讨论】:

  • 所以在想要的输出中,假设我们开始在 Excel 中将 D 写入 A1,A1 会是 'abc' 而 B3 会是 ' '?
  • 感谢您的回复。 B3 将是空的。

标签: arrays matlab cell-array


【解决方案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'

【讨论】:

    【解决方案2】:

    这将是一种矢量化方法 -

    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{:})
    

    示例运行 -

    >> A,B,C
    A = 
        'abc'
        'acd'
        'aaa'
    B = 
        'baa'
        'bbb'
    C = 
        'acc'
        'aaa'
        'aad'
    >> out_cell
    out_cell = 
        'abc'    'baa'    'acc'
        'acd'    'bbb'    'aaa'
        'aaa'       []    'aad'
    

    请注意,如果您一开始就这样做,您可以完全避免创建 D -

    D1 = {A,B,C}
    

    【讨论】:

      猜你喜欢
      • 2021-04-22
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      相关资源
      最近更新 更多