访问非标量结构的所有记录的特定字段中的第i个元素

时间:2015-04-08 17:35:06

标签: arrays matlab vectorization

我有一个名为mystruct的结构,其中包含两个字段:field1field2。一个典型的例子:

mystruct(1).field1 = 'a'
mystruct(1).field2 = [100 200 300] % an array of elements

mystruct(2).field1 = 'b'
mystruct(2).field2 = [700 800 900] % an array of elements

如何在没有循环的情况下访问每条记录中的field2的第一个元素(例如上例中的100和700)?

1 个答案:

答案 0 :(得分:3)

优雅的解决方案可能是使用arrayfun

ii = 1;
out = arrayfun(@(x) x.field2(ii), mystruct)

这基本上是这个简单循环的另一种表示法:

ii = 1;
for jj = 1:numel(mystruct)
    out(jj) = mystruct(jj).field2(ii);
end

如果你有很多的字段而且所有数组都有相同的长度,那么你可以考虑以下解决方案,它更加向量化,也许更快一点

ii = 1;
X = vertcat( mystruct(:).field2 )
out = X(:,ii)

out =

   100
   700