毎日の日付、価格、時間 (すべて同じサイズのベクトル) の 3 つの列を持つマトリックスA
があります。1 日の時間に関連付けられた複数の価格があります。
以下のサンプルデータ:
A_dates = A_hours= A_prices=
[20080902 [9.698 [24.09
20080902 9.891 24.59
200080902 10.251 24.60
20080903 9.584 25.63
200080903 10.45 24.96
200080903 12.12 24.78
200080904 12.95 26.98
20080904 13.569 26.78
20080904] 14.589] 25.41]
午前 9 時 30 分から午後 16 時までのほぼすべての分をカバーする、1 日あたり約 10,000 の価格の約 2 年間の日次データがあることを覚えておいてください。実際、最初のデータセット時間はミリ秒単位でした。次に、ミリ秒を時間に変換しました。14.589 のような時間を、3 つの異なる価格で 3 回繰り返しました。したがって、私は次のことを行いました:
time=[A_dates,A_hours,A_prices]; [timeinhr,price]=consolidator(time,A_prices,'mean'); ここで、timeinhr はベクトル A_dates と A_hours の両方です
それぞれの平均価格を 14.589 時間とします。次に、.25 .50 .75 および整数時間の欠落時間について-補間したいと思います。
日付ごとに時間が繰り返され、「必要な」時間にない価格を直線的に補間する必要があります。ただし、もちろん、複数の日があるため、列で時間が繰り返される場合、コマンド interp1 を使用することはできません。だから、言って:
%# here I want hours in 0.25unit increments (like 9.5hrs)
new_timeinhr = 0:0.25:max(A_hours));
day_hour = rem(new_timeinhour, 24);
%# Here I want only prices between 9.5hours and 16hours
new_timeinhr( day_hour <= 9.2 | day_hour >= 16.1 ) = [];
次に、1 日の一意のベクトルを作成し、for コマンドと if コマンドを使用して補間daily
し、新しい価格をベクトルに次々と積み上げたいと考えています。
days = unique(A_dates);
for j = 1:length(days);
if A_dates == days(j)
int_prices(j) = interp1(A_hours, A_prices, new_timeinhr);
end;
end;
私のエラーは次のとおりです。
In an assignment A(I) = B, the number of elements in B and I must be the same.
どうすればint_prices(j)
スタックに書き込むことができますか?