【问题标题】:Loop to create cell array循环创建元胞数组
【发布时间】:2018-09-28 12:40:35
【问题描述】:

我有一个名为data 的结构。该结构有 250 个元素和一个名为 codes 的字段(其维度不同)。

例如:data(1).codes300 x 1 字符串单元格,data(2).codes100 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

【问题讨论】:

    标签: matlab cells


    【解决方案1】:

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

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

    【讨论】:

    • 像魅力一样工作。谢谢(特别是包括关于非数字字段的额外步骤)!
    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 2014-02-05
    • 2018-06-28
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多