我目前正在使用matlab,我尝试从我拥有的结构中提取一些数据,但似乎并不像我想的那么容易。
structExample = 1x100000
fieldnames(structExample)
ans =
6×1 cell array
{'a'}
{'b'}
{'c'}
{'d'}
{'e'}
{'f'}
我对字段'b'中保存的值感兴趣。当我输入structExample.b时,它会打印出所有值,但是当我这样做时
values = structExample.b
它只保存第一个值([1.2,5.33])。例如,'b'具有双值
[1.2,5.33],1x86double,1x120double ......
我的目标是能够用cdfplot()绘制它们 所以我想可能迭代字段中的所有值并将它们保存在单独的数组中。但我不知道如何遍历它,因为structExample.b只接受第一个值。有任何想法吗?
编辑: structExample.b(3)返回
期望从大括号或点索引表达式输出一个,但有41817个结果。
当您访问structure array的字段时,它返回值为comma-separated list。默认情况下,只将列表中的第一个值分配给单个变量。如果你想捕获所有这些值,你必须使用[]
(对于normal array)或{}
(对于cell array)来收集它们。由于您在每个结构中处理不同大小的数据集,因此您需要使用单元数组:
values = {structExample.b};
因此,values{1}
将包含[1.2,5.33]
,values{2}
将包含1x86 double
等。
对于要迭代结构数组的情况,必须以正确的顺序索引数组元素和字段。您应该首先索引元素(这将为您提供数组中的单个结构元素),然后索引您想要的字段:
value = structExample(3).b; % Field b of the third array element
对于要从结构数组中的索引元素子集中收集字段的其他情况,您必须组合上面的索引和集合方案。例如:
values = {structExample([structExample.a] == 1).b};
这将从a
收集所有structExample
字段值到一个数组中,找到logical index,它们等于1
,用该逻辑数组索引structExample
数组,然后从该子数组中收集字段b
的值并将它们放在单元格数组中。