循环创建元胞数组

Loop to create cell array

我有一个名为 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。如果这些只有数字,我知道如何 concatenate/append 矩阵。但是对于细胞,我不确定该怎么做。

这是我尝试过的:

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

将您的输出构建到一个新的元胞数组中,允许预先分配,然后连接所有结果。

% 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( ... )');