株価の時間の列がある非常に大きなマトリックス (750000 x 6) があります。時間間隔は均一ではないため、新しい時間を補間しました。平日の勤務時間のみを含めたいので、補間された時間がその時間内にあるかどうかを確認し、それらのエントリを新しい行列にコピーする for ループがあります。ただし、私のプログラムの実行には永遠に時間がかかります(> 10分)。これは私の元のコードです:
A = IBM;
times = A(:,1);
incr = t;
uniqday = datevec(times);
uniqday = unique(uniqday(:,1:3), 'rows'); % unique days for data
% Computes interpolated prices at sampling interval
interptimes = (times(1):incr:times(end)).';
% Fractional hours into the day
frac_hours = 24*(interptimes - floor(interptimes));
% Exclude interpolated times outside of trading hours
newtimes = interptimes((frac_hours > 0) & (frac_hours < 19.1));
% Exclude weekends & holidays
newtimesvec = datevec(newtimes);
newtimesvec2 = zeros(length(newtimesvec),6);
for j = 1:length(uniqday)
for i = 1:length(newtimesvec)
if newtimesvec(i,1:3) == uniqday(j,:)
newtimesvec2(i,:) = newtimesvec(i,:);
else %Program always get stuck at this line
end
end
end
したがって、補間された時間配列のエントリを削除すると、新しいマトリックスにコピーするよりも高速になるのではないかと考えましたが、エントリが削除されると、補間された時間配列のサイズが変更されるため、この for ループによりマトリックスの外部にアクセスします。どうすればこれを修正できるかわかりません。
for i = 1:length(interptimes)
for j = 1:length(uniqday)
if interptimes(j,1:3) == uniqday(j,:)
else
interptimes(j,:) = [];
end
end
end