Matlab:将单元格数组转换为单个单元格数组
Matlab: Convert cell array of cells into a single cell array
我有,D 是不匹配的字符串元胞数组的元胞数组
A =
{'abc';
'acd' ;
'aaa'}
B =
{'baa' ;
'bbb'}
C =
{'acc';
'aaa';
'aad'}
D = { {A}, {B}, {C}}
A、B、C的大小不同,我本来就不知道它们的大小,所以我把它们组合成D。如何将D转换成一个元胞数组,这样我就可以写了进入 excel sheet?
即
D =
{'abc' 'baa' 'acc';
'acd' 'bbb' 'aaa';
'aaa' ' ' 'aad'}
您可以让 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'
这将是一种矢量化方法 -
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}
我有,D 是不匹配的字符串元胞数组的元胞数组
A =
{'abc';
'acd' ;
'aaa'}
B =
{'baa' ;
'bbb'}
C =
{'acc';
'aaa';
'aad'}
D = { {A}, {B}, {C}}
A、B、C的大小不同,我本来就不知道它们的大小,所以我把它们组合成D。如何将D转换成一个元胞数组,这样我就可以写了进入 excel sheet?
即
D =
{'abc' 'baa' 'acc';
'acd' 'bbb' 'aaa';
'aaa' ' ' 'aad'}
您可以让 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'
这将是一种矢量化方法 -
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}