0

我可以像这样计算数据集的每日平均值:

Jday = datenum('2010-11-01 00:00','yyyy-mm-dd HH:MM'):60/(60*24):...
    datenum('2011-02-31 23:00','yyyy-mm-dd HH:MM');
Dat = rand(length(Jday),1);
DateV = datevec(Jday);
[~,~,b] = unique(DateV(:,1:3),'rows');
AvDat = abs(accumarray(b,Dat,[],@nanmean));     
AvJday = abs(accumarray(b,Jday,[],@nanmean));  

但是,我想取一个给定输出分辨率数字的数据集的平均值。例如,如果我写

outRes = 86400; % in seconds

我想对这些值进行平均,以使输出分辨率等于 86400 秒,如果outRes定义的分辨率比数据的分辨率短,则不会进行平均。

如何才能做到这一点?

4

1 回答 1

0

您应该能够通过以下方式检测数据的分辨率:

CurrentRes=mean(diff(Jday))*86400;
if (~all(diff(Jday)==CurrentRes))
    error('Inequally distributed sampling times');
end

if (CurrentRes>outRes)
    return;

那么你需要下采样的数量是:

AveragingFactor=outRes/CurrentRes;

然后,您可以通过在末尾(或开始)丢弃一些样本并进行平均来进行平均:

Dat = reshape(Dat(1:end-mod(length(Dat),AveragingFactor),:),AveragingFactor,[]);
AvDat = mean(Dat,1)'; % Transpose to keep it as a column vector if necessary.
于 2013-06-17T16:06:13.303 回答