我目前正在与matlab合作,我尝试从我拥有的 struct 中提取一些数据,但似乎并不像我想象的那么容易。
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个结果。
答案 0 :(得分:2)
访问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
的值并将其放在单元格数组中。