解决结构的单元阵列

时间:2013-10-28 16:54:34

标签: arrays matlab cell

我有以下单元格数组:

res{1}.nft.x=1;
res{2}.nft.x=2;
res{3}.nft.x=3;

如何在这种情况下轻松获取一系列nft.x值,即[1 2 3]

谢谢!

2 个答案:

答案 0 :(得分:2)

使用comma-separated lists(MATLAB中非常强大的功能):

v = [res{:}];
v = [v.nft];
v = [v.x];

当然,这仅适用于所有结构具有相同字段的情况。如果没有,你将不得不求助于循环或类似的东西,例如:

cellfun(@(x)x.nft.x, res)

后者可能看起来更优雅,但对于更大的数据集来说肯定要慢得多。

澄清

res{:}创建一个以逗号分隔的结构列表,[res{:}]将它们连接成一个数组。再次访问结构数组的字段会导致以逗号分隔的列表,从而产生额外的连接,字段访问和另一个连接。

答案 1 :(得分:2)

使用cellfun

>> cellfun( @(x) x.nft.x, res )