【发布时间】:2017-01-01 00:28:03
【问题描述】:
我有 5 个 Matlab 结构。我想遍历它们。我目前的解决方案如下:
all_structs = [struct1,struct2,struct3,struct4,struct5];
for single_struct = all_structs
% do stuff to each struct here
end
但是,上面的每个结构都有一个包含大量数据(包括其他一些属性)的矩阵。另外,我在single_struct 中所做的任何更改都不会传递回原来的struct。
问题:我该如何解决这个问题?当我创建向量all_structs 时,Matlab 是否会再次复制所有这些数据?还是每个结构(struct1,...,struct5)的数据是通过引用传递的?有没有更好的方法来迭代多个结构?
感谢您的帮助!
【问题讨论】:
-
听起来好像最初的问题是结构不是结构数组。我会自发地建议您尝试解决原始问题。我知道这有时会很复杂,但否则我相信你必须忍受这种开销。如果你这样做一次,时间延迟不会那么糟糕。答案中有
eval的解决方案,但我不推荐它。如果内存失效,也可以分步进行。 -
@patrik 嘿,这是一个非常有用的建议。因此,与其创建一堆结构体,不如创建一个结构体数组,它就像一个包含结构体的结构体。是这样吗?
-
就是这样完成的。这里值得注意的是,所有结构都将具有相同的字段,并且这些字段中的矩阵将具有相同的大小。 struct 元素可以完全作为数组访问,
numel(s(1).a) == N; numel(s(2).a) == N。如果矩阵的大小不同,则必须改用cell数组。这些可通过运算符{}、numel(c{1}) ==N; numel(c{2} ~=N)访问。