我有一个A
包含三列的矩阵:每日日期、价格和小时数 - 都是相同大小的向量 - 一天中有多个价格与小时数相关联。
样本数据如下:
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]
请记住,我有大约两年的每日数据,每天大约有 10 000 个价格,几乎涵盖了每天上午 9:30 到下午 16:00 的每一分钟。实际上我最初的数据集时间是以毫秒为单位的。然后我以小时为单位转换我的毫秒数。我有几个小时,例如 14.589,以 3 种不同的价格重复了 3 次。因此,我做了以下事情:
时间=[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 ) = [];
然后,我创建了一个唯一的一天向量,并希望使用 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)
堆栈?