平均相似的时间段MATLAB

时间:2016-07-07 16:35:05

标签: matlab matrix timestamp mean

我有一个带有时间戳和几个列变量的矩阵。 矩阵跨越一个月的半小时变量。这是矩阵的四列

的样本
11/11/2015 20:15    31.26410236 35.70104634 35.93171056
11/11/2015 20:45    32.10746291 35.48806277 35.9647747
.
.
.
12/11/2015 20:15    32.10746291 35.48806277 35.9647747
12/11/2015 20:45    32.10746291 35.48806277 35.9647747
.
.
.
13/11/2015 20:15    32.68310429 35.58753807 37.26447422
13/11/2015 20:45    33.05141516 34.8432801  36.48033884
.
.
.
14/11/2015 20:15    32.08328579 34.66482668 34.65446868
14/11/2015 20:45    32.19994433 34.40562145 34.34035989

以小时和分钟为单位查找相同时间平均值的最简单方法是什么? 例如。每月所有日期20:45时每个变量的平均值。

我知道我可以通过将时间戳转换为datenum来实现此目的,取datenum的小数部分并按datenum的小数部分对数据进行排序。之后,我可以阻止具有相似小数datenum s的行的平均值。是否有更高效,更优雅的方式?

2 个答案:

答案 0 :(得分:0)

使用matlab,您可以直接使用日期和时间,而无需将其转换为以毫秒或秒为单位的时间戳:

http://es.mathworks.com/help/matlab/date-and-time-operations-1.html

或者一种简单的方法是将日期转换为日期向量like this

DateVector = datevec(DateString,formatIn)

然后比较你想要的列:

[Y,M,D,H,MN,S] = datevec(___)

>> A = datevec('13/11/2015 20:45','dd/mm/yyyy HH:MM')

A =

        2015          11          13          20          45           0

>> B = datevec('14/11/2015 20:45','dd/mm/yyyy HH:MM')

B =

        2015          11          14          20          45           0

这很容易比较日期:

>> A - B

ans =

     0     0    -1     0     0     0

恰好有一天差异

答案 1 :(得分:0)

这就是我为解决这个问题所做的工作:

timestamp=linspace(datenum('2015-11-01 00:00', 'yyyy-mm-dd HH:MM'),datenum('2015-12-01 00:00', 'yyyy-mm-dd HH:MM'),1440); % 30 days
timestamp=timestamp';
time_of_day=datetime(datevec(timestamp(1:48)),'Format','HH:mm');
numdays=30;
data=rand(length(timestamp),2);
means=NaN(48,3);
for tt=1:48
    means(tt,:)=[datenum(time_of_day(tt)) nanmean(data(tt:48:48*numdays,:),1)];
end

    figure;
    plot(time_of_day,means(:,2:3));
    xlim([timestamp(1) timestamp(48)]);