【发布时间】:2017-10-08 01:30:14
【问题描述】:
早安,
我有一个这种格式的嵌套结构。
Data: [1x1 struct]
a: [1x1 struct]
a1: [10x1 double]
a2: [10x1 double]
a3: [10x1 double]
b: [1x1 struct]
b1: [10x1 double]
b2: [10x1 double]
c: [1x1 struct]
c1: [10x1 double]
c2: [10x1 double]
c3: [10x1 double]
c4: [10x1 double]
a、b 和c 的每个子字段都是桶中事件的持续时间百分比。每个桶中元素的数量是数据集的数量。我想对每个数据集的桶值求和,如果它们加起来不等于 100%,则丢弃整个数据集。如何以简单的格式使用 for 循环访问 a、b 和 c 字段的桶的每个元素Data。
编辑:我想出了如何调用子字段及其元素,将百分比和现在相加,如果数据集的总和不超过 100,则需要从每个子字段中完全删除字段。
field = fieldnames(Data);
for group = 1:length(field)
for subfield = fieldnames(Data.(field{group}))
fieldSize = structfun(@(field) length(field),Data.(field{group}));
nb_datasets = fieldSize(1,1);
for jj = 1:nb_datasets
for ii = 1:length(subfield)
a_dataset_pcts(jj,ii) = Data.(field{group}).(subfield{ii})(jj,1);
end
a_pct_total(jj,:) = sum(a_dataset_pcts(jj,:));
end
end
end
【问题讨论】:
-
你自己有没有尝试过?
-
喜欢用
@(field) mean(field)替换@(field) length(field)。 -
@Mad Physicist 重申我上面的问题:a1、a2、a3 是 a 组的百分比桶。我想知道如何访问这些存储桶元素中的每一个,以便以后可以执行多个任务(平均值只是一个示例)。桶中元素的数量是数据集的数量。桶元素表示事件的百分比,a1(1,1)、a2(1,1)、a3(1,1) 的总和应为 100%。如果它们的总和没有达到 100%,则后续的其他任务应该是删除整个数据集。
-
我理解了这个问题。你有什么尝试解决它。您知道
for循环是一种可能的解决方案。例如,我们能否看到您尝试编写的for循环? -
@Mad Physicist 我想我明白了,我不确定如何将子字段定义为 Data.(field{1}) ... 不是最好的编码风格,但它可以工作。
标签: matlab for-loop struct nested field