循环创建单元格数组

时间:2018-04-18 10:04:17

标签: matlab cells

我有一个名为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

1 个答案:

答案 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是数字,输出将是数字矩阵。如果不是,您需要对数字数据(idcount)进行一些单元格转换,如下所示:

id = repmat({k}, size(data(k).codes,1), 1);
count = num2cell(linspace( ... )');