2016-07-07 3 views
0

У меня есть матрица с меткой времени и несколькими переменными столбца. Матрица охватывает месяц полуторачасовых переменных. Вот пример из четырех столбцов матрицыСредний аналогичный период времени MATLAB

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 с. Есть ли более эффективный и элегантный способ?

ответ

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 

ровно один день разница

+0

Спасибо за ваш вклад. Как я могу использовать это, чтобы группировать и находить средние значения с n-дневными различиями? – Buzz

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)]);