我可以像这样计算数据集的每日平均值:
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
短于数据的分辨率,则不会进行平均。
如何做到这一点?
答案 0 :(得分: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.