MATLAB:计算串行时间内每5分钟的平均值

MATLAB:计算串行时间内每5分钟的平均值,matlab,matrix,time,time-series,Matlab,Matrix,Time,Time Series,使用MATLAB(R2015b),我有一个时间序列a,它是一个4000x3矩阵。下面是一个示例,其中第一列为串行时间(此处为13:56:37至14:25:09),第二列和第三列为测量值: 1.0e+05 * 7.366965809837962 0.000082000000000 0.062000000000000 7.366965810300925 0.000082500000000 0.013000000000000 7.366965836689815 0.0000830

使用MATLAB(R2015b),我有一个时间序列
a
,它是一个4000x3矩阵。下面是一个示例,其中第一列为串行时间(此处为13:56:37至14:25:09),第二列和第三列为测量值:

1.0e+05 *

7.366965809837962   0.000082000000000   0.062000000000000
7.366965810300925   0.000082500000000   0.013000000000000
7.366965836689815   0.000083000000000   0.040000000000000
7.366965857291667   0.000085000000000   0.013000000000000
7.366965875810186   0.000086000000000   0.010000000000000
7.366965876851851   0.000086000000000   0.020000000000000
7.366965889351852   0.000087000000000   0.015000000000000
7.366965892245370   0.000087000000000   0.016000000000000
7.366965896875000   0.000087000000000   0.004000000000000
7.366965897337963   0.000087500000000   0.050000000000000
7.366965901967592   0.000087500000000   0.002000000000000
7.366965906018518   0.000093000000000   0.010000000000000
7.366965907060185   0.000093000000000   0.010000000000000
7.366965928587963   0.000092000000000   0.010000000000000
7.366965962268518   0.000091500000000   0.030000000000000
7.366965973263889   0.000092000000000   0.001000000000000
7.366965974768519   0.000092000000000   0.050000000000000
7.366965982060186   0.000090000000000   0.010000000000000
7.366965993402777   0.000090000000000   0.090000000000000
7.366966007986111   0.000090000000000   0.043330000000000
如何计算每五分钟第二列和第三列的平均值(而不是每个事件)?因此,在前5分钟13:55:00-14:00:00,我们应该得到中间列的平均值8.225,右边列的平均值3750,例如:

13:55:00  8.225  3750
14:00:00  8.4    2650

我尝试过,但没有成功,因此非常感谢您的帮助。

我想这会对您有所帮助

%Inital reference position
pos=1;

%Counter
count=1;

for i=2:20
    %Elapsed seconds since the reference position
    elapsed_seconds=etime(datevec(a(i,1)),datevec(a(pos,1)));
    if elapsed_seconds>5*60 %Calculate means if larger than 5 minutes
        matrix(count,1)=a(pos,1);
        matrix(count,2)=mean(a(pos:(i-1),2));
        matrix(count,3)=mean(a(pos:(i-1),3));
        count=count+1; %Update counter
        pos=i; %Update reference position
    end
end

matrix

我想这对你有帮助

%Inital reference position
pos=1;

%Counter
count=1;

for i=2:20
    %Elapsed seconds since the reference position
    elapsed_seconds=etime(datevec(a(i,1)),datevec(a(pos,1)));
    if elapsed_seconds>5*60 %Calculate means if larger than 5 minutes
        matrix(count,1)=a(pos,1);
        matrix(count,2)=mean(a(pos:(i-1),2));
        matrix(count,3)=mean(a(pos:(i-1),3));
        count=count+1; %Update counter
        pos=i; %Update reference position
    end
end

matrix

这个问题的好处在于,你可以把它分解成简单的块。首先,让我们把矩阵分解成向量

times=A(1,:);
measurementX=A(2,:);
measurementY=A(3,:);
第二部分是你需要把时间分成5分钟的增量。让我们创建一个时间向量,从
7.366965809837962e5
(您的第一次)开始,以5分钟为增量上升到
7.366966007986111e5
(您的最后一次)。不幸的是,在MATLAB中,我不知道在5分钟的增量中存在多少滴答声,我会任意假设它是123e3。您需要正确替换该号码

timeIncrements=7.366965809837962e5:123e3:7.366966007986111e5
现在,我们需要找到一个增量开始之后和下一个增量开始之前的所有时间标记:

for (i=1:length(timeIncrements)-1)
    indicies{i}=times>timeIncrements(i)&&times<=timeIncrements(i+1);
end

巨大的音符这未经测试,但提供了您需要执行的操作的一般要点。我没有访问MATLAB的权限,也无法四处玩以确保它是正确的还有,这是非常冗长的,你的问题有两行答案,但如果不实际使用MATLAB,我想不出来(曾经有一段时间,我会一下子就知道,但唉,那一天已经过去了)。祝你好运

这个问题的好处在于,你可以把它分解成简单的块。首先,让我们把矩阵分解成向量

times=A(1,:);
measurementX=A(2,:);
measurementY=A(3,:);
第二部分是你需要把时间分成5分钟的增量。让我们创建一个时间向量,从
7.366965809837962e5
(您的第一次)开始,以5分钟为增量上升到
7.366966007986111e5
(您的最后一次)。不幸的是,在MATLAB中,我不知道在5分钟的增量中存在多少滴答声,我会任意假设它是123e3。您需要正确替换该号码

timeIncrements=7.366965809837962e5:123e3:7.366966007986111e5
现在,我们需要找到一个增量开始之后和下一个增量开始之前的所有时间标记:

for (i=1:length(timeIncrements)-1)
    indicies{i}=times>timeIncrements(i)&&times<=timeIncrements(i+1);
end

巨大的音符这未经测试,但提供了您需要执行的操作的一般要点。我没有访问MATLAB的权限,也无法四处玩以确保它是正确的还有,这是非常冗长的,你的问题有两行答案,但如果不实际使用MATLAB,我想不出来(曾经有一段时间,我会一下子就知道,但唉,那一天已经过去了)。祝你好运

我做了一些改变:)我不确定这是否完全有效。运行时间从
a(i,1)
a(pos,1)
计算,但
a(pos,1)
不一定从5分钟窗口开始。
pos
从1开始,仅当
运行时间大于5*60(5分钟后)时才会更新。我认为它是这样工作的:)考虑一下a(1,:)的元素
[1.3,2,3,5.5,7,8,10.1]
是否以分钟为单位测量。对于经过的前5分钟,我们正确地计算了1.3、2和3个元素的平均值。然后,算法注意到5.5超出了最初经过的5分钟,并将
pos
更新为其索引(索引4)。然后,我们重新开始计算参考时间5.5分钟的运行时间。然后,我们在第二个5分钟窗口中得到元素5.5、7、8和10.1(包括10.1,因为10.1-5.5I做了一些更改:),我不确定这是否完全有效。运行时间从
a(i,1)
a(pos,1)
计算,但
a(pos,1)
不一定从5分钟窗口开始。
pos
从1开始,仅当
运行时间大于5*60(5分钟后)时才会更新。我认为它是这样工作的:)考虑一下a(1,:)的元素
[1.3,2,3,5.5,7,8,10.1]
是否以分钟为单位测量。对于经过的前5分钟,我们正确地计算了1.3、2和3个元素的平均值。然后,算法注意到5.5超出了最初经过的5分钟,并将
pos
更新为其索引(索引4)。然后,我们重新开始计算参考时间5.5分钟的运行时间。然后,我们在第二个5分钟窗口中得到了元素5.5、7、8和10.1(包括10.1是因为10.1-5.5感谢您的帮助!但是您能否澄清什么是“timeBins”(在第一个for循环中)?呜呜。我的错误。
timeBins
=>
timeIncrements
。谢谢您的帮助!但您能否澄清什么是“timeBins”(在第一个for循环中)?Bleh.我的错误。
timeBins
==>
时间增量