1

我目前正在做一个涉及 MATLAB 的项目,但我似乎无法找到解决这个问题的方法。我有一个如下所示的数据集:

   262    23    34
   262    23    34
   262    23    35
   262    23    38
   262    23    38
   262    23    39
   262    23    40
   262    23    41
   262    23    42
   262    23    43
   262    23    45
   262    23    46
   262    23    47
   262    23    48
   262    23    50
   262    23    50
   262    23    51
   262    23    52
   262    23    55
   262    23    57
   262    23    58
   263     0     0
   263     0     2
   263     0     4
   263     0     7
   263     0    10
   263     0    15
   263     0    25
   263     0    29
   263     0    32
   263     0    39
   263     1     1
   272    23    28
   272    23    30
   272    23    56
   273     0     1
   273     0     2
   273     0     3
   273     0     3
   273     0     4
   273     0     4
   273     0     5
   273     0     5
   273     0     6
   273     0     8
   273     0    10
   273     0    32
   273     0    37

从左到右分别代表儒略日、UTC 小时和制作雨量计尖端的分钟。

我需要计算每天 5 分钟的总计及其累积,例如,262 天 13-15 分钟的降雨提示总计(因为没有提供 23:34 之前的信息),13-20 累积,13- 25, 13-30,... 等等。就像我说的每次记录是在制作一个尖端时,一个尖端的沉淀量是 0.01 英寸。所以我只需要知道在 5 分钟的时间间隔内一天内做了多少提示。

有人可以帮我吗?

4

2 回答 2

1

您可以将日-小时-分钟转换为分钟。假设您的数据存储在一个称为(how original)的n-by-3 矩阵中。data然后

 >> minutes = data * [24*60; 60; 1]; % counting minutes from the begining

现在您必须定义箱的边缘(求和的间隔):

 >> edges = min(minutes) : 5 : max(minutes); % you might want to round the lower and upper limits to align with a 5 minute interval.

用于histc计算每个垃圾箱中有多少滴

 >> drops = histc(minutes, edges); 
于 2013-07-04T21:45:27.323 回答
1

也许是这样的:

%# all possible days represented in the data
%# (you could also do this for all 1:365 days)
days = unique(X(:,1));

%# cumulative counts in each 5 minutes intervals
%# (each column represents one of the days)
counts = zeros(24*60/5,numel(days));


for i=1:numel(days)
    %# indices of the instances in that day
    idx = (X(:,1) == days(i));

    %# convert hour/minute into minute units
    m = X(idx,2).*60 + X(idx,3);

    %# count occurences in each 5 minute bin
    c = accumarray(fix(m/5)+1, 1, [24*60/5 1]);

    %# take the cumulative sum and store it
    counts(:,i) = cumsum(c);
end

所以对于 day=262 我们有:

>> counts(end-6:end,1)
ans =
     0    %# [00:00, 23:30)
     2    %# [00:00, 23:35)
     6    %# [00:00, 23:40)
    10    %# [00:00, 23:45)
    14    %# [00:00, 23:50)
    18    %# [00:00, 23:55)
    21    %# [00:00, 00:00 of next day)
于 2013-07-04T22:06:12.563 回答