matlab如何处理不均匀小时采样的数据,并合并成均匀日采样

前一专栏我介绍了如何将每日的水位数据合并成每月

Matlab实现GNSS、水位监测日数据转成月数据_matlab 由日数据求月平均-CSDN博客

现在我分享一个matlab程序,将每小时不均匀采样的水质数据统一成日采样。这一方法对其他的有关时间数据处理具有借鉴意义。

下面展示了部分水质数据 water.txt 的数据的具体格式:

月  日  年     小时

10 02 2013 12:00    0    0    0.4259    0    0    0.0102    0    0
10 02 2013 20:00    0    0    0.4425    0    0    0.0068    0    0
10 03 2013 04:00    0    0    0.4287    0    0    0.0046    0    0
10 03 2013 12:00    0    0    0.4573    0    0    0.0035    0    0
10 03 2013 20:00    0    0    0.4599    0    0    0.0054    0    0
10 04 2013 04:00    0    0    0.4282    0    0    0.004    0    0
10 04 2013 12:00    0    0    0.4346    0    0    0.0034    0    0
10 04 2013 20:00    0    0    0.4174    0    0    0.0158    0    0
10 05 2013 04:00    0    0    0.3955    0    0    0.0171    0    0

我们看到每一行时间采样是不均匀的,因此我们的思路是:循环读取,在数据后面添加label,如果日是不变的,则label是1,当前后的日发生变化,则对应的label加1,这样我们最终可以得到互相不冲突的label标记,后面只需要对相同标记的行求平均。

下面是matlab代码:

A = load(['water.txt']);

    ind1 = 1;
    new_ = [A,zeros(length(A(:,1)),1)];

    for i = 1:length(A(:,1))
        if(i==1)
            new_(1,14) = ind1;  
        else

            if(A(i,2)-A(i-1,2)==0)
                new_(i,14) = ind1;
            else
                ind1 = ind1+1;
                new_(i,14) = ind1;
            end
        end
    end

    for i = 1:max(new_(:,14))
        ind = find(new_(:,14)==i);
        if(length(ind)==1)
            out(i,:) = new_(ind,:);
        else
            out(i,:) = mean(new_(ind,:));
        end
    end

♥欢迎点赞收藏♥