1

我对结构有一个简单的问题。

让我们创建:

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

如何从所有 x-es 中列出 a(1, 1)?

我想这样做:

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

但是有一个错误“这种类型的多级索引需要标量索引”。

如何接近它?我知道我可以用循环来做到这一点,但这可能是最糟糕的解决方案:) 谢谢!

4

2 回答 2

2

如果这是您想要对其进行的那种查询,那么这不是最好的数据结构,正是因为这种索引不能直接完成。

但是,这是一种有效的方法:

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

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

于 2012-03-18T13:04:18.447 回答
2

您还可以通过以下方式获取数据:

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

顺便说一句,循环并不邪恶。有时它们甚至比矢量化索引更快。尝试两种方式,看看哪种方式最适合您:

  • 速度 - 使用分析器检查
  • 代码清晰度 - 取决于上下文。有时矢量化代码看起来更好,有时则相反。
于 2012-03-18T16:39:40.517 回答