【问题标题】:for loop with structure+matlab带有结构+ matlab的for循环
【发布时间】:2014-04-02 19:50:12
【问题描述】:

我有一个名为 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 将数据分解为几个小时。有道理?

【问题讨论】:

  • 语言?尝试?错误?
  • 很抱歉我编辑包含 matlab。到目前为止,我只是把它分成了几天和几小时。我正在努力寻找循环它们的最佳方式。我尝试过的每一种方法似乎都没有正确地做到这一点。我试过了:
  • 似乎您想将“小时”循环置于“日”循环之外,但显然这不适用于您现在的数据结构方式。
  • 您的结构中还有其他字段吗?展示一个小例子。
  • 您需要在内部 for 循环中使用 if 语句来检查两个结构的天数和小时数是否相等,如果条件为真则进行处理,否则跳过。跨度>

标签: matlab for-loop data-structures


【解决方案1】:

如果我很好地理解了您的问题,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}

【讨论】:

  • 我相信extractfield功能你需要Mapping Toolbox。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2016-05-01
相关资源
最近更新 更多