我有一个名为sacfile的结构,其中包含各种站点的数据(sta1-sta6)。 sacfile进一步增加到日增量(sacfile.day,每个站),并进一步增加到每天的每小时增量(sacfile.day.hour)。我想循环每一天,然后每个小时进行每个站点的比较(即第032天循环到sta1 hr 1,比较sta2 hr 1,sta3 hr 1,sta4 hr1,sta5 hr1,sta6 hr 1,依此类推等到那一天的所有时间,然后进入第二天,等等。你明白了。工作站是在sacfile.sta中定义的。有没有人对我如何能做到这一点有任何建议?
*我只想循环播放电台的当天和小时,然后转到后续的日和小时。我不想交叉比较不同的日子和时间。这对循环很重要。
我尝试了以下内容:
for i = 1:length(sacfile)
for j = 1:length(sacfile(i,1).day)
for h = 1:length(sacfile(i,1).day.hour)
但似乎每个小时都在循环。这是否有效,我怎么能确定它在正确的日子里循环,即sta1的第1天与sta2的第1天相同。
以下是其中一个结构的示例:
name: '2013.032.00.00.00.0000.TA.POKR..BHE.sac'
date: '31-Mar-2014 12:25:33'
bytes: 11949036
isdir: 0
datenum: 7.3569e+05
net: 'TA'
sta: 'POKR'
loc: ''
comp: 'BHE'
day: [1x1 struct]
data: [2987101x1 double]
time: [1x2987101 double]
header: [1x1 struct]
唯一相关的是net,sta,loc,comp,day和data。 net,sta,loc,comp是文件的关键标识字段。名称是文件的名称。 Day将数据分解为几小时。合理?
答案 0 :(得分:0)
如果我很好地理解了您的问题,那么extractfield()
和fieldnames()
函数应该会有所帮助。
fields = fieldnames(sacfile);
for i = 1:numel(fields)
b = extractfield(sacfile.(fields{i}).day, 'day3');
c(i) = extractfield(b{1}.hour, 'hour_x');
end
函数extractfield()
返回包含结构而不是结构本身的1x1单元格。这就是我做b{1}