如何在Matlab中对结构体数组进行多级索引



假设我在matlab中创建了一个结构体数组:

mystruct = repmat(struct('field1',1, 'field2', ones(10,1)), 10, 1 );

对于我的目的(简单的例子除外),我发现通过使用

获得矢量输出非常有用:
myvector = mystruct(:).field2(1) 

然而这给了我错误:

'Scalar index required for this type of multi-level indexing.'

编辑:我希望得到的是一个向量的第一个元素,从数组中的每个结构体,因此一个10x1的向量'1'。

我可以很容易地手动使用for循环遍历struct中的每个值并将其赋值给myvector,但这似乎非常麻烦,而且速度也很慢。任何想法吗?

我假设您正在尝试将所有field2向量收集到myvector:

myvector = [mystruct(:).field2];

的回报:

myvector =
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1
     1     1     1     1     1     1     1     1     1     1

编辑:根据你的评论,你可以使用上面的并扔掉你不想要的数据(在这种情况下是myvector(2:end,:) = [];)。这是一种非常占用内存的方法。可能有一种方法可以使用structfun或类似的方法来拉你想要的东西,但我需要考虑如何做到这一点。

EDIT2:试试arrayfun(@(x) x.field2(1), mystruct),看看它是否返回你想要的。

两步:

  1. 将struct filed2作为矩阵:

  2. 获取第一行(包含字段d2的第一个索引)

    myvector = foo(1,:);

最新更新