【问题标题】:matlab working with long time seriesmatlab处理长时间序列
【发布时间】:2013-03-09 12:22:54
【问题描述】:

我有一个类似于以下开头的数据集:

year month  daynum  hour     depth        wtemp
1989    5   136      0          0.01     14.32
1989    5   136      0          0.5      14.32
1989    5   136      0          1        13.52
1989    5   136      0          2        12.31
1989    5   136      0          3        10.16
1989    5   136      0          4        8.61
1989    5   136      0          6        6.86
1989    5   136      0          8        6.03
1989    5   136      0          10       5.45
1989    5   136      1          0.01     13.38
1989    5   136      1          0.5      13.41
1989    5   136      1          1        13.12
1989    5   136      1          2        10.88
1989    5   136      1          3        10.09
1989    5   136      1          4        9.09
1989    5   136      1          6        7.24
1989    5   136      1          8        6.45
1989    5   136      1          10       5.67
1989    5   136      2          0.01     13.2
1989    5   136      2          0.5      13.24
1989    5   136      2          1        13.24
1989    5   136      2          2        11.07
1989    5   136      2          3        10.14
1989    5   136      2          4        9.02
1989    5   136      2          6        7.23
1989    5   136      2          8        6.23
1989    5   136      2          10       5.59
1989    5   136      3          0.01     13.11
1989    5   136      3          0.5      13.15
1989    5   136      3          1        13.11
1989    5   136      3          2        11.26
1989    5   136      3          3        10.25
1989    5   136      3          4         9.2
1989    5   136      3          6         6.99
1989    5   136      3          8         5.96
1989    5   136      3          10        5.5

此数据集包含超过 1,000,000 行数据。当我将数据导入 matlab 时,我留下了这个结构(尽管没有标题)。我想知道如何返回每个单独时间段的最小和最大深度(即第 5 列)的索引?

这种情况下的答案是这样的:

1,9
10,18,

and so on.

请记住,在整个调查期间,测量次数以及深度数会有所不同,因此我必须使用年、月、日、小时和深度的信息。

这里的主要目的是建立一个矩阵,其中仅包含每小时在最小和最大深度记录的温度。

到目前为止我已经尝试过(数据是矩阵的名称):

[~,~,b] = unique(data(:,1:4),'rows');
MaxMin_temp = [abs(accumarray(b,data(:,end),[],@min)), abs(accumarray(b,data(:,end),[],@max))];

返回每一天的最小和最大深度的温度。由此,我希望有一种更复杂的方法来获取这些值的整个列。

【问题讨论】:

  • 到目前为止你有什么尝试?你最近问了很多 Matlab 问题,你慢慢地得到 SO 来教你,你学到了什么,你可以为社区做出什么贡献?
  • 我在 2 周内问了 3 个问题。这是不能接受的吗?我通常不会在问题中提供我的尝试,我认为冗长的问题会吓跑人们回答它,但如果我需要展示我的尝试,那是足够公平的。
  • 是的,您提问的速度完全可以接受。但是,通过隐藏您自己回答问题的努力,您会邀请诸如我(上图)之类的 snippy cmets,他们指责您在请求 SO 帮助之前没有足够努力。 SO 喜欢尝试者,向我们展示你是这样的人并因此被爱的唯一方法就是向我们展示你尝试过的东西。花一些时间环顾 SO,尤其是能得到好的答案的问题。
  • 最近在此处介绍了与 accumarray 一起使用时从 min/max 获取索引:stackoverflow.com/questions/15440874/…

标签: matlab


【解决方案1】:

使用datenum 为每个时间段分配一个整数索引。
然后您可以使用accumarray 两次:一次使用@min,一次使用@max 作为“累积”函数来计算深度或温度列的最小(最大)值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-01
    • 2016-08-16
    • 2016-07-01
    • 2015-05-06
    • 2020-09-01
    • 1970-01-01
    • 2020-10-17
    • 2018-03-15
    相关资源
    最近更新 更多