1

我有一个类似于以下内容的数据集:

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))];

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

4

1 回答 1

1

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

于 2013-03-20T12:12:55.650 回答