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

时间:2014-08-22 17:31:59

标签: matlab data-structures indexing

假设我使用以下命令在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但这看起来非常麻烦而且速度慢。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我假设您正在尝试将所有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 :(得分:1)

您可以分两步:

  1. 将您的struct filed2作为矩阵:

    foo = [mystruct.field2];

  2. 获取第一行(包含field2的第一个索引)

    myvector = foo(1,:);