我有一个名为data
的结构。该结构有250个元素和一个名为codes
的字段(其大小各不相同)。
例如:data(1).codes
是字符串的300 x 1
单元格,data(2).codes
是字符串的100 x 1
单元格。
我要做的是创建一个包含三列的大单元格:id count codes
其中id
索引元素编号(1到250),count
索引该行的行字符串和codes
只是代码。
明确说明的一个例子:
for k = 1:size(data,2)
id = repmat(k,size(data(k).codes,1),1);
count = linspace(1, size(data(k).codes,1), size(data(k).codes,1))';
codes= data(k).codes;
end
上面的循环创建了我想要的列。现在我只需要将它们一个接一个地添加到另一个之后然后保存到excel。如果这些只有数字,我知道如何连接/追加矩阵。但对于细胞,我不确定如何做到这一点。
以下是我的尝试:
output = {};
for k = 1:size(data,2)
id = repmat(k,size(data(k).codes,1),1);
count = linspace(1, size(data(k).codes,1), size(data(k).codes,1))';
codes= data(k).codes;
output{1,1} = {output{1,1}; id};
output{1,2} = {output{1,2}; count};
output{1,3} = {output{1,3};
end
答案 0 :(得分:2)
将输出构建到新的单元格数组中,允许预分配,然后连接所有结果。
% Initialise
output = cell(size(data,2), 1);
% Create output for each element of data
for k = 1:size(data,2)
id = repmat(k,size(data(k).codes,1),1);
count = linspace(1, size(data(k).codes,1), size(data(k).codes,1))';
codes = data(k).codes;
% add to output
output{k} = [id, count, codes];
end
% Vertically concatenate all cell elements
output = vertcat(output{:});
注意:这假设codes
是数字,输出将是数字矩阵。如果不是,您需要对数字数据(id
和count
)进行一些单元格转换,如下所示:
id = repmat({k}, size(data(k).codes,1), 1);
count = num2cell(linspace( ... )');