循环在Matlab结构上

时间:2014-08-01 13:55:10

标签: matlab for-loop structure

我目前正在处理一系列已导入结构的文件,但在尝试循环数据时遇到了麻烦。

首先,这是我的结构:

  1. 1.1 az160,az240,az300 ......

    1.1.2 zen15, zen30,zen45... 
    
        1.1.2.1 Data
    
        1.1.2.2 Textdata
    
  2. 我试图从每个“textdata”单元格数组中提取一个值,并使用它来划分相同结构的数据中的列。为此,我按以下方式循环遍历结构:

    az_names = fieldnames(ice)
    
    for m = 1:numel(az_names)
    
      snames = fieldnames(ice.(az_names{m}))
    
      for k = 1:numel(snames)
    
        inttime = strrep(ice.(az_names{m}).(snames{k}).textdata(9,1), 'Integration > Time (usec): ','');
        inttime = strrep(inttime, ' (USB2+E00040)','');
        integration = cellfun(@str2num,inttime)
    
    line 17    ice.(az_names{m}).(snames{k}).data(:,4) = ice.(az_names{m}).(snames{k}).data(:,3)/integration
    
       end
    end
    

    我收到以下错误:

      

    指数超出矩阵维度

    编辑:Matlab在第17行给出了错误。如果我将代码运行到“集成”并写入:

      

    冰(az_names {M})(snames {K})的数据。(:,4)

    我没有遇到任何问题,Matlab打印以筛选正确的数字和数据列。

    我认为这会循环遍历结构中的每个字段并执行操作(将一列值除以数字),但我似乎在这里缺少一点。任何人都可以看到我的错误吗?

    此致

1 个答案:

答案 0 :(得分:0)

如果尝试执行此片段时发生错误:

ice.(az_names{m}).(snames{k}).data(:,4)

然后原因很简单。

变量mk似乎处理得当(由于循环中的numel它们永远不会太大),这意味着4太大了。

检查

ice.(az_names{m}).(snames{k}).data(:,4)

甚至更直接

size(ice.(az_names{m}).(snames{k}).data)

你应该发现大小的第二个元素小于4。


第二个想法,这个片段有效:

a.b=1;
a.b(:,4)=1

因此我怀疑在尝试阅读本部分时会发生错误:

ice.(az_names{m}). (snames{k}).data(:,3)

意味着大小的第二个元素甚至应该小于3.

另外我建议删除空间。