1

我刚开始学习Matlab,如果你能帮助我,我将不胜感激......

我坚持计算几个小时和每天的回报。对于某些数据,以下方法正常:

(now the price is between that hours)
n=length(price);
% The number if days 
%(79 is the number of observations within one day)
ndays = n/79;
price_d = reshape(price,79,ndays);
%I take returns for each day
returns_d = log(price_d(2:79,:))- log(price_d(1:78,:));

但是,现在我有另一个数据,其中每天的观察次数不再相同。所以在一天之内,我在一天内的另外 30,75 次观察中有 79 次。因此我不能再使用 RESHAPE ..:(

我应该怎么做才能根据每天对观察(价格)进行排序?所以要和以前有类似的东西:行与价格和列与每天对应的价格..

所以我有一个这样的数据的nx1(n = 935039)向量:734142 734142 734142 734142 734142 734143 734143 734143 734143 734143 734143 734143 734143 734143..

然后是价格的向量:1115.800000000 1115.4000000001116 1116 1115.8000000001115.7000000001115.7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000近报

还有一个以秒为单位的向量:0 300 600 900 1200 1500 1800 2100 2400 2700 3000 3300 3600 3900 ...

没有办法将它们分成一个矩阵,我不知道有多少行(这将是每天的价格),但我知道列数 1260(这是我拥有的日子).. 或者如果不只是用每天的价格制作 1260 个向量(nx1)。

在 Ox 中会是这样的(我的协调员 4 博士告诉我,但他不使用 matlab):for(i = 1; i <= sizeof(vdates); i = i+1) daily_file = selectifr([bid ,问], 日期 .== vdates[i]); 如果为空继续保存daily_file contract_name + "_" + sprint(vdates[i]) + ".mat"; 但是我找不到从 Ox 到 Matlab 的 ''selectifr'' 的反函数。

我的 5 分钟盘中数据有标准普尔的未来指数。所以我更喜欢在一个矩阵中包含价格(行)的天数(1260)列(就像我在使用重塑时拥有它们一样)..或者让1260个nx1向量与每天的价格相对应..之后我将不得不看看成交量在哪里变化,所以我要传递给另一个合同(展期)..你能帮我把它们分成几天,或者每天都有价格的单个向量吗?

..我没有 nx1260 矢量...我只是说我的 unique(dates)=1260

4

1 回答 1

1

您可以使用包含不同长度向量的元胞数组,每天一个。cellfun然后可以使用or来计算每天的一些东西arrayfun

>> measurements = {[1,2,3],[10,11],[14,15,16,17]};
>> avg_per_day = cellfun(@mean, measurements)
avg_per_day =
    2.0000   10.5000   15.5000
于 2013-09-06T08:06:32.627 回答