当一天内的观测数量不相同时,使用什么而不是重塑?

时间:2013-09-06 07:23:06

标签: matlab reshape

我刚刚开始学习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.80000000000 1115.40000000000 1116 1116 1115.80000000000 1115.70000000000 1115.70000000000 1115.40000000000 1115.60000000000 1115.60000000000 1115.70000000000 1115.60000000000 1115.60000000000 1115.70000000000 1115.70000000000 1115.70000000000 11-15.70000000000 11个对应的价格:...

以秒为单位的矢量:0 300 600 900 1200 1500 1800 2100 2400 2700 3000 3300 3600 3900 ......

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

在牛将会是这样的(我的协调员4博士告诉我,但他不使用matlab):for(i = 1; i< = sizeof(vdates); i = i + 1)daily_file = selectifr([bid,ask],dates。== vdates [i]);如果为空则继续保存daily_file contract_name +“_”+ sprint(vdates [i])+“。mat”;我无法找到从牛到Matlab的''selectifr''的opossite功能..

对于我的5分钟日内数据,我在S& P上有未来指数。所以我更喜欢在一个矩阵中有一天(1260)列与价格(行)(就像我使用它们时使用重塑)..或者有1260 nx1向量与价格对应每天..之后我将不得不看看音量在哪里变化所以我要转到另一个合同(Rolloverdates)..你能帮助我在几天内拆分它们,或者每天价格的单个载体吗?

..我没有nx1260矢量......我只是说我的独特(日期)= 1260

1 个答案:

答案 0 :(得分:1)

您可以使用包含不同长度的矢量的单元格数组,每天一个。然后,可以使用cellfunarrayfun来计算每天的某些内容。

>> 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