迭代很多结构

时间:2014-09-19 12:32:04

标签: matlab loops struct

我的问题如下:

我有大约300个Struct文件。 它们的设置如下:

DSC_0001中包含大约250个其他结构文件: - >像这样:DSC_0001.marker_1 这一个有10个数字。 像那样: DSC_0001.marker_1.flow_angle = 90

现在我想迭代所有的Struct文件 这样的事情:

for i = 1:300
    for j = 1:250
         flow_angle = DSC_**i**.marker_**j**
    end
end

有办法做到这一点吗? 我觉得这可能很容易,但我无法找到解决方案...... 我希望我的问题很清楚......

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

如果可能,请不要使用eval。

这取决于您的数据的存储方式,但有一种可能性是它位于.mat文件中。在这种情况下,可以使用

加载
DSC_structs = load('My_DSC_struct_file.mat');

然后您可以像这样访问值:

for i = 1:300
    for j = 1:250
        flow_angle(i,j) = DSC_structs.(['DSC_' sprintf('%04d',i)]).(['marker_' sprintf('%d',j)]);
    end
end

Why avoid the eval function

编辑:您说每个结构都在不同的文件中。那有点麻烦。我可能会做这样的事情来加载它们:

DSC_structs = cell(1,300);
for i = 1:300
    %Note: I'm guess at your file names here
    DSC_structs{i} = load(['DSC_' sprintf('%04d',i) '.mat'];
end

然后以

的形式访问这些值
DSC_structs{i}.(['DSC_' sprintf('%04d',i)]).(['marker_' sprintf('%d',j)]);

答案 1 :(得分:0)

我想这是可怕的eval函数的用例:

for i = 1:300
    for j = 1:250
         eval (['flow_angle = DSC_', sprintf('%04d',i), '.marker_', num2str(j)]);
    end
end

但是 NB 我的代码上面存在2个问题

  1. 您还没有告诉我们您想要存储角度的位置,所以我的代码并没有:/但如果您只想将它​​们存储在矩阵中,您就会想要这样的东西: eval (['flow_angle(', num2str(i), ',', num2str(j), ') = DSC_', sprintf('%04d',i), '.marker_', num2str(j)])
  2. eval是一种可怕的做事方式,但是你被迫,因为有人把你的数据保存得很糟糕。通过以更智能的方式重新保存您的数据,现在为您自己排序!所以像:
  3. for i = 1:300
         eval ( ['DSC(', num2str(i), ') = DSC_', sprintf('%04d',i)]);
    end
    %// then save DCS!
    

    现在你可以遍历这个结构矩阵,而不是让300个结构污染你的工作区并强迫你使用eval