動作するコードがいくつかありますが、少しボトルネックであり、速度を上げる方法を見つけようとして立ち往生しています。ループしていて、ベクトル化する方法がわかりません。
時系列データを表す vals という 2D 配列があります。行は日付、列は異なる系列です。データを月ごとにバケット化して、さまざまな操作 (合計、平均など) を実行しようとしています。これが私の現在のコードです:
allDts; %Dates/times for vals. Size is [size(vals, 1), 1]
vals;
[Y M] = datevec(allDts);
fomDates = unique(datenum(Y, M, 1)); %first of the month dates
[Y M] = datevec(fomDates);
nextFomDates = datenum(Y, M, DateUtil.monthLength(Y, M)+1);
newVals = nan(length(fomDates), size(vals, 2)); %preallocate for speed
for k = 1:length(fomDates);
この次の行がボトルネックになっているのは、何度も呼び出すためです。(ループ)
idx = (allDts >= fomDates(k)) & (allDts < nextFomDates(k));
bucketed = vals(idx, :);
newVals(k, :) = nansum(bucketed);
end %for
何か案は?前もって感謝します。