Matlab:将单元格数组转换为单个单元格数组

Posted

技术标签:

【中文标题】Matlab:将单元格数组转换为单个单元格数组【英文标题】:Matlab: Convert cell array of cells into a single cell array 【发布时间】: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 将是空的。 【参考方案1】:

您可以在需要时让 MATLAB 展开元胞数组:

F=; 
for k = 1:numel(D), 
    F(1:numel(Dk), end+1)=Dk; 
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

【讨论】:

以上是关于Matlab:将单元格数组转换为单个单元格数组的主要内容,如果未能解决你的问题,请参考以下文章

如何访问数组并将其存储在python中的单个数组中(类似于matlab中的单元格)

如何在 Matlab 中将字符串单元格数组转换为 int 和 NaN?

如何将 Matlab 单元字符串数组转换为 .NET 字符串数组

如何将字符串数字的单元格数组转换为数值向量[重复]

Pandas 如何将数组放置在单个数据框单元格中?

将元胞数组值提取为 java 数据类型