2012-03-18 162 views
1

我有一个简单的结构问题。matlab:结构数据和多级索引

让我们创建:

x(1).a(:, :) = magic(2); 
x(2).a(:, :) = magic(2)*2; 
x(3).a(:, :) = magic(2)*3; 

如何列出一个(1,1)从所有的X-ES?

我想做到这一点,如:

x(1, :).a(1,1) 

,但有一个错误“对于这种类型的多级索引所需的标量指标。”

如何处理它?我知道我可以做一个循环,但这可能是最糟糕的解决方案:) 谢谢!

回答

2

这不是最好的数据结构使用,如果这是你想要做的查询,正是因为这种索引不能直接完成。

然而,这里是一个办法,工作原理:

cellfun(@(X) X(1,1), {x.a}) 

语法{x.a}从“结构数组”到单元格数组转换x。然后,我们使用cellfun将函数作为映射应用于单元阵列。匿名函数@(X) X(1,1)需要一个参数X并返回X(1,1)

+0

谢谢。但是如果我想要f.ex怎么办? x(1,:)。a(:,1)? – Art 2012-03-21 04:09:21

2

你也可以得到你的数据是这样的:

B = cat(3,x.a); 
out = reshape(B(1,1,:),1,[]); 

顺便说一句,环不是邪恶。有时甚至比矢量化索引更快。尝试了两种方式,看看来讲,你最适合:

  • 速度 - 使用分析器来检查
  • 代码清晰 - 取决于上下文。有时矢量化的代码看起来更好,有时却相反。