我目前正在处理一系列已导入结构的文件,但在尝试循环数据时遇到了麻烦。
首先,这是我的结构:
冰
1.1 az160,az240,az300 ......
1.1.2 zen15, zen30,zen45...
1.1.2.1 Data
1.1.2.2 Textdata
我试图从每个“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打印以筛选正确的数字和数据列。
我认为这会循环遍历结构中的每个字段并执行操作(将一列值除以数字),但我似乎在这里缺少一点。任何人都可以看到我的错误吗?
此致
答案 0 :(得分:0)
如果尝试执行此片段时发生错误:
ice.(az_names{m}).(snames{k}).data(:,4)
然后原因很简单。
变量m
和k
似乎处理得当(由于循环中的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.
另外我建议删除空间。