Can';t在结构matlab的字段上迭代
我目前正在使用matlab,我试图从我拥有的结构中提取一些数据,但这似乎不像我想象的那么容易Can';t在结构matlab的字段上迭代,matlab,Matlab,我目前正在使用matlab,我试图从我拥有的结构中提取一些数据,但这似乎不像我想象的那么容易 structExample = 1x100000 fieldnames(structExample) ans = 6×1 cell array {'a'} {'b'} {'c'} {'d'} {'e'} {'f'} 我对字段“b”中保存的值感兴趣。 当我键入structExample.b时,它会打印出所有的值,但当我这样做时 values =
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],1x86双精度,1x120双精度
我的目标是能够使用cdfplot()绘制它们
所以我想可以迭代字段中的所有值,并将它们保存在一个单独的数组中。但是我不知道如何遍历它,因为structExample.b只接受第一个值。有什么想法吗
编辑:structExample.b(3)返回 应为大括号或点索引表达式的一个输出,但 共有41817项结果
访问的字段时,它将返回一组值。默认情况下,仅将列表中的第一个值指定给单个变量。如果要捕获所有这些值,必须使用
[]
(对于a)或{}
(对于a)收集它们。由于要处理每个结构中不同大小的数据集,因此需要使用单元格数组:
values = {structExample.b};
因此,值{1}
将包含[1.2,5.33]
,值{2}
将包含1x86双精度
,等等
对于要迭代结构数组的情况,必须按照正确的顺序对数组元素和字段进行索引。您应该首先对元素进行索引(这将为您提供数组中的单个结构元素),然后对所需字段进行索引:
value = structExample(3).b; % Field b of the third array element
对于要从结构数组中的已索引元素子集收集字段的其他情况,必须从上面组合索引和收集方案。例如:
values = {structExample([structExample.a] == 1).b};
这将把
structExample
中的所有a
字段值收集到一个数组中,找到它们等于1
的a,用该逻辑数组索引structExample
数组,然后从该子数组中收集字段b
的值,并将它们放在单元格数组中。如果我可以补充一个问题,是否有一种基于“a”值保存数据的简洁方法。示例:values1=[structExample.b]如果“a”==1迭代的问题是,当我调用length(structExample.b)时,它表示它有太多的值,正如gnovice所解释的,您需要将数据封装在数组中。所以length([structExample.b])
应该可以工作