无法迭代结构matlab的字段

问题描述 投票:1回答:1

我目前正在使用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个结果。

matlab
1个回答
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的值并将它们放在单元格数组中。

© www.soinside.com 2019 - 2024. All rights reserved.