假设我使用以下命令在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但这看起来非常麻烦而且速度慢。有什么想法吗?
答案 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)
您可以分两步:
将您的struct filed2作为矩阵:
foo = [mystruct.field2];
获取第一行(包含field2的第一个索引)
myvector = foo(1,:);