0

我有一个这样组成的数据集:

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 之间的所有刻度数据。问题是这个代码,它是函数的一部分,似乎只在这个特定的行上失败,我觉得很奇怪,因为它已经被复制和粘贴,只有数字 45 和 50 被更改,其他类似的部分直到第 105 行的功能代码不会失败。我已经目视检查了原始数据,并且看不出数据的性质是导致失败的原因。对于失败的可能原因有什么建议吗?

4

1 回答 1

0

首先,使用 datenum 将您的年、月、日、小时、分钟、秒变量转换为时间:

datenum(2009,11,01,17,00,23)

将返回自 1/1/0000 以来过去的天数。假设您将所有时间保存在一个称为时间的向量中。现在,应该很容易找到您第一次/最后一次拥有的时间:

first = min(times); 
last = max(times);

一分钟等于:

ONE_MINUTE = 1/24/60

现在分箱完成如下:

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 的向量,其中每次都包含一些数据。

(我知道这可以优化很多,但我更喜欢这个答案的清晰度而不是性能)

于 2009-11-25T13:02:33.107 回答