从数组

时间:2016-09-19 22:07:07

标签: matlab matlab-struct

我有一个数据集,我想根据数据集的一列中的值对结构进行分类和存储。例如,数据可以分类为元素' label_100'标签_200'或' label_300'我在下面尝试:

%The labels I would like are based on the dataset
example_data = [repmat(100,1,100),repmat(200,1,100),repmat(300,1,100)];
data_names = unique(example_data);

%create a cell array of strings for the structure fieldnames
for i = 1:length(data_names)
    cell_data_names{i}=sprintf('label_%d', data_names(i));
end

%create a cell array of data (just 0's for now)
others = num2cell(zeros(size(cell_data_names)));

%try and create the structure
data = struct(cell_data_names{:},others{:})

此操作失败,我收到以下错误消息:

"使用struct时出错 字段名称必须是字符串。"

(另外,有没有更直接的方法来实现我上面尝试做的事情?)

1 个答案:

答案 0 :(得分:2)

根据documentation of struct

  

S = struct('field1',VALUES1,'field2',VALUES2,...)创建了一个       具有指定字段和值的结构数组。

因此,您需要在字段名称后面加上每个值。您现在拨打struct的方式是

S = struct('field1','field2',VALUES1,VALUES2,...)

而不是正确的

S = struct('field1',VALUES1,'field2',VALUES2,...).

您可以通过垂直连接cell_data_namesothers然后使用{:}生成以逗号分隔的列表来解决此问题。这将给出细胞'按主列顺序排列的内容,因此每个字段名称后面紧跟着相应的值:

cell_data_names_others = [cell_data_names; others]
data = struct(cell_data_names_others{:})