我有一个带有时间戳和几个列变量的矩阵。 矩阵跨越一个月的半小时变量。这是矩阵的四列
的样本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的行的平均值。是否有更高效,更优雅的方式?
答案 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)]);