假设我在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)
,看看它是否返回你想要的。
两步:
-
将struct filed2作为矩阵:
-
获取第一行(包含字段d2的第一个索引)
myvector = foo(1,:);