循环创建元胞数组
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
是数值,输出将是一个数值矩阵。如果不是,您需要对数值数据(id
和 count
)进行一些单元格转换,如下所示:
id = repmat({k}, size(data(k).codes,1), 1);
count = num2cell(linspace( ... )');
我有一个名为 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
是数值,输出将是一个数值矩阵。如果不是,您需要对数值数据(id
和 count
)进行一些单元格转换,如下所示:
id = repmat({k}, size(data(k).codes,1), 1);
count = num2cell(linspace( ... )');