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?