美好的一天,
我有这种格式的嵌套结构。
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%,则丢弃整个数据集。我如何访问a
,b
&的{0}}桶的每个元素。 c
的{{1}}字段以简单格式使用for循环。
编辑:我想出了如何调用子字段&它的元素,总和百分比和&现在,如果数据集不加100,则需要从每个子字段中完全删除。
Data
答案 0 :(得分:0)
Matlab就像矩阵Bensa ....你应该放弃你的方法现在。
固定大小的数据集
如果所有a
,b
,c
数组的大小都为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')'
可变大小的数据集
如果a
,b
,c
数组每次都不同,那么您升级最后一个数据并切换到单元格单元格:< / 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
这有意义吗?请随时在下面发表评论...