我对结构有一个简单的问题。
让我们创建:
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)
但是有一个错误“这种类型的多级索引需要标量索引”。
如何接近它?我知道我可以用循环来做到这一点,但这可能是最糟糕的解决方案:) 谢谢!
我对结构有一个简单的问题。
让我们创建:
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)
但是有一个错误“这种类型的多级索引需要标量索引”。
如何接近它?我知道我可以用循环来做到这一点,但这可能是最糟糕的解决方案:) 谢谢!
如果这是您想要对其进行的那种查询,那么这不是最好的数据结构,正是因为这种索引不能直接完成。
但是,这是一种有效的方法:
cellfun(@(X) X(1,1), {x.a})
语法从“结构数组”转换为元胞数组{x.a}
。x
然后我们使用cellfun
将函数作为映射应用到元胞数组上。匿名函数@(X) X(1,1)
接受一个参数X
并返回X(1,1)
。
您还可以通过以下方式获取数据:
B = cat(3,x.a);
out = reshape(B(1,1,:),1,[]);
顺便说一句,循环并不邪恶。有时它们甚至比矢量化索引更快。尝试两种方式,看看哪种方式最适合您: