Arrays matlab:结构数据和多级索引

Arrays matlab:结构数据和多级索引,arrays,matlab,indexing,structure,multi-level,Arrays,Matlab,Indexing,Structure,Multi Level,我有一个关于结构的简单问题 让我们创建: x(1).a(:, :) = magic(2); x(2).a(:, :) = magic(2)*2; x(3).a(:, :) = magic(2)*3; 如何从所有x-E中列出a1和1 我想这样做: x(1, :).a(1,1) 但这种类型的多级索引需要一个错误标量索引 如何处理?我知道我可以通过循环来实现,但这可能是最糟糕的解决方案: 谢谢 如果这是您希望对其进行的查询类型,那么这不是最好的数据结构,因为这种索引无法直接完成 但是,以下是一种有

我有一个关于结构的简单问题

让我们创建:

x(1).a(:, :) = magic(2);
x(2).a(:, :) = magic(2)*2;
x(3).a(:, :) = magic(2)*3;
如何从所有x-E中列出a1和1

我想这样做:

x(1, :).a(1,1)
但这种类型的多级索引需要一个错误标量索引

如何处理?我知道我可以通过循环来实现,但这可能是最糟糕的解决方案:
谢谢

如果这是您希望对其进行的查询类型,那么这不是最好的数据结构,因为这种索引无法直接完成

但是,以下是一种有效的方法:

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

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

如果这是您希望对其进行的查询类型,那么这不是最好的数据结构,正是因为这种索引无法直接完成

但是,以下是一种有效的方法:

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

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

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

B = cat(3,x.a);
out = reshape(B(1,1,:),1,[]);
顺便说一下,循环不是邪恶的。有时,它们甚至比矢量化指数化更快。尝试两种方法,看看什么最适合你:

速度-使用探查器检查 代码清晰-取决于上下文。有时矢量化代码看起来更好,有时正好相反。
您还可以通过以下方式获取数据:

B = cat(3,x.a);
out = reshape(B(1,1,:),1,[]);
顺便说一下,循环不是邪恶的。有时,它们甚至比矢量化指数化更快。尝试两种方法,看看什么最适合你:

速度-使用探查器检查 代码清晰-取决于上下文。有时矢量化代码看起来更好,有时正好相反。
谢谢但是如果我想要f.ex呢。x1,:.a:,1?谢谢。但是如果我想要f.ex呢。x1,:.a:,1?