我有一个这样组成的数据集:
2009,11,01,17,00,23,1.471700,1.472000
2009,11,01,17,01,04,1.471600,1.471900
2009,11,01,17,01,09,1.471900,1.472100
2009,11,01,17,01,12,1.472000,1.472300
2009,11,01,17,01,13,1.471900,1.472200
2009,11,01,17,01,14,1.471600,1.471900
2009,11,01,17,01,18,1.471700,1.472000
2009,11,01,17,01,18,1.471900,1.472200
我正在使用Octave来操纵这些数据。我想使用此刻度数据以5,10和30分钟的间隔创建包含数据的各种文件。使用此格式,可以将它们绘制为条形/烛台图表并执行进一步的计算。但是,我真的不知道如何处理数据循环来创建这样的文件。
我熟悉Octave并使用这个软件,但是这个特殊的任务可以在其他软件中进行,以生成文件以便以后导入Octave。
我在Octave中首次尝试对此进行编码会出现此错误: -
error: A(I,J,...) = X: dimensions mismatch
error: called from:
error: /home/andrew/Documents/forex_convert/tick_to_min.m at line 105, column 25
产生它的代码是
[i,j]=find(fMM>=45 & fMM<50);
min_5_vec(1:length(i),1)=tick_data(min(i):max(i),1); % line 105
代码检查“分钟”向量fMM,并应提取并创建一个新的“min_5_vec”向量,其中包含每小时HH:45:00和HH:49:59之间发生的所有tick数据。事情是这个代码,它是一个函数的一部分,似乎只在这个特定的行上失败,我发现它非常奇怪,因为它已被复制和粘贴,只有图45和50已被更改,以及其他类似的部分直到第105行的功能代码不会失败。我已经直观地检查了原始数据,并且看不出数据性质的原因是失败的原因。有关失败的可能原因的任何建议?
答案 0 :(得分:0)
首先,使用datenum将您的年,月,日,小时,分钟,第二个变量转换为次数:
datenum(2009,11,01,17,00,23)
将返回自1/1/0000以来的天数。 假设您在称为时间的向量中保存所有时间。 现在,找到你的第一次/最后一次应该很容易:
first = min(times);
last = max(times);
一分钟等于:
ONE_MINUTE = 1/24/60
现在,binning就像:
index = 1;
means = [];
for t = first:5*ONE_MINUTE:last
current_bin = (times>=t) & (times<t+5*ONE_MINUTE)
% do something with all the data for which current_bin==1
means(index) = mean(data(current_bin));
index = index+1;
end
仅举例来说,我计算了每个bin中数据的均值。我假设你有一个名为data的向量,每次都包含一些数据。
(我知道这可以进行很多优化,但我更倾向于澄清这个答案的性能)