MATLAB:使用For循环访问嵌套结构中的数据

时间:2017-05-09 16:09:57

标签: matlab for-loop struct nested field

美好的一天,

我有这种格式的嵌套结构。

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]

ab&的每个子字段c是存储桶中事件的持续时间百分比。每个桶中的元素数是数据集的数量。我想对每个数据集的桶值求和,如果它们不加100%,则丢弃整个数据集。我如何访问ab&的{0}}桶的每个元素。 c的{​​{1}}字段以简单格式使用for循环。

编辑:我想出了如何调用子字段&它的元素,总和百分比和&现在,如果数据集不加100,则需要从每个子字段中完全删除。

Data

1 个答案:

答案 0 :(得分:0)

Matlab就像矩阵Bensa ....你应该放弃你的方法现在

固定大小的数据集

如果所有abc数组的大小都为10x1,则应立即切换到数组,即索引持续时间,数组列每个持续时间的数据集:

a: [1x1 cell]
    a{1}: [10xna double]
    a{2}: [10xnb double]
    a{3}: [10xnc double]

所有统计数据都很简单。您有两个for循环,一个用于持续时间,另一个用于数据集。 Matlab矢量化每个数据集内的函数(大多数时间)。在这里,我假设max(.)是用于获取统计信息的聚合数组函数:

n=length(a);
for i=1:n
    ni=size(a{i},2);
    for j=1:ni
        max(a{i})
        mean(a{i}')'
        if j==j0 && i==i0
            a{i}(:,j)=[];  % Cleanup j0th event in i0th dataset
        end
    end
end

您需要比较a.a1& b.b1& c.c1?如果这是真的,那么你强制应该创建辅助数组x,然后得到你的统计数据:

for i=1:n
    x(:,i)=a{i};
end
max(x')'

可变大小的数据集

如果abc数组每次都不同,那么您升级最后一个数据并切换到单元格单元格:< / p>

a{1}: [1xna cell]
    a{1,1}: [la(1)x1 double]
    ...
    a{1,na}: [la(na)x1 double]
a{2}: [1xnb cell]
    ...
a{3}: [1xnc cell]
    ...

在这里,max(.')'方法毫无用处,因为每个数据集的长度可能不同。如果是这种情况,您仍然可以通过列来引用数据:

n=length(a);
for i=1:n
    ni(i)=size(a{i},2);
    for j=1:ni(i)
        li=length(a{i,j})   % Length of each dataset
        max(a{i,j})
        % mean(a{i}')'      % This do not work anymore
        if j==j0 && i==i0
            a{i,j}=[];      % Cleanup j0th event in i0th dataset
        end
    end
end

这有意义吗?请随时在下面发表评论...