1年分のデータがあれば
Jday = datenum('2010-01-01 00:00','yyyy-mm-dd HH:MM'):1/24:...
datenum('2010-12-31 23:00','yyyy-mm-dd HH:MM');
dat = rand(length(Jday),1);
「dat」の月間平均を計算したい場合は、次を使用します。
% monthly averages
dateV = datevec(Jday);
[~,~,b] = unique(dateV(:,1:2),'rows');
monthly_av = accumarray(b,dat,[],@nanmean);
しかし、日中、つまり 6 時間から 18 時間の間に発生するポイントの月平均を計算したいのですが、どうすればよいでしょうか?
月平均で使用したい時間を分離できます。
idx = dateV(:,4) >= 6 & dateV(:,4) <= 18;
次に、「b」を変更して、次の方法でこれらのポイントのみを含めることができます。
b(double(idx) == 0) = 0;
次に、平均を計算します
monthly_av_new = accumarray(b,dat,[],@nanmean);
しかし、これは機能しません。accumarray は正の整数でしか機能しないため、エラーが発生します。
accumarray 使用時のエラー 最初の入力 SUBS には、正の整数の添え字が含まれている必要があります。
私が概説したことを行うための最良の方法は何でしょうか? これを行うときに変数「dat」を変更したくないことに注意してください。つまり、平均を計算する前に「dat」からいくつかの値を削除します。
考えてみると、最善の解決策は
month_av = accumarray(b(idx),dat(idx),[],@nanmean);