在循环中使用 MatLab 'Union' 函数
Using MatLab 'Union' function in a loop
考虑到 MatLab 结构,我对字段名进行了如下循环:
scenario = fieldnames(myStruct)
for scenarioidx = 1:length(scenario)
scenarioname = scenario{scenarioidx};
category = fieldnames(myStruct.(scenarioname))
for categoryidx = 1:length(category)
categoryname = category{categoryidx};
entity = fieldnames(myStruct.(scenarioname).(categoryname))
end
end
此循环 returns 每个类别的实体。现在,我想将所有这些实体组合在一个向量中。我尝试使用 'union' 函数如下:
scenario = fieldnames(myStruct)
for scenarioidx = 1:length(scenario)
scenarioname = scenario{scenarioidx};
category = fieldnames(myStruct.(scenarioname))
for categoryidx = 1:length(category)
categoryname = category{categoryidx};
allEntity = {}
entity = fieldnames(myStruct.(scenarioname).(categoryname))
combo_entity = union (allEntity, entity)
end
end
不幸的是,这只是返回与以前相同的结果,并没有合并任何东西。
有没有人知道如何在这样的循环中实现联合函数?
简单地说:
struct_entities = structfun(@struct2cell, myStruct, 'UniformOutput', false);
cell_entities = struct2cell(struct_entities);
all_entities = unique(vertcat(cell_entities{:}));
想法是:
- 检索实体并放弃类别名称;
- 也放弃场景名称,因为不需要它们;
- assemble 单个元胞数组中的累积实体。
如果需要使用union,那么代码可以改写为:
all_entities = {};
scenarios = fieldnames(myStruct);
for si = 1:numel(scenarios)
categories = fieldnames(myStruct.(scenarios{si}));
for ci = 1:numel(categories)
entities = fieldnames(myStruct.(scenarios{si}).(categories{ci}));
all_entities = union(all_entities, entities);
end;
end;
考虑到 MatLab 结构,我对字段名进行了如下循环:
scenario = fieldnames(myStruct)
for scenarioidx = 1:length(scenario)
scenarioname = scenario{scenarioidx};
category = fieldnames(myStruct.(scenarioname))
for categoryidx = 1:length(category)
categoryname = category{categoryidx};
entity = fieldnames(myStruct.(scenarioname).(categoryname))
end
end
此循环 returns 每个类别的实体。现在,我想将所有这些实体组合在一个向量中。我尝试使用 'union' 函数如下:
scenario = fieldnames(myStruct)
for scenarioidx = 1:length(scenario)
scenarioname = scenario{scenarioidx};
category = fieldnames(myStruct.(scenarioname))
for categoryidx = 1:length(category)
categoryname = category{categoryidx};
allEntity = {}
entity = fieldnames(myStruct.(scenarioname).(categoryname))
combo_entity = union (allEntity, entity)
end
end
不幸的是,这只是返回与以前相同的结果,并没有合并任何东西。 有没有人知道如何在这样的循环中实现联合函数?
简单地说:
struct_entities = structfun(@struct2cell, myStruct, 'UniformOutput', false);
cell_entities = struct2cell(struct_entities);
all_entities = unique(vertcat(cell_entities{:}));
想法是:
- 检索实体并放弃类别名称;
- 也放弃场景名称,因为不需要它们;
- assemble 单个元胞数组中的累积实体。
如果需要使用union,那么代码可以改写为:
all_entities = {};
scenarios = fieldnames(myStruct);
for si = 1:numel(scenarios)
categories = fieldnames(myStruct.(scenarios{si}));
for ci = 1:numel(categories)
entities = fieldnames(myStruct.(scenarios{si}).(categories{ci}));
all_entities = union(all_entities, entities);
end;
end;