получение информации из вектора времени - PullRequest
0 голосов
/ 10 марта 2012

У меня есть вектор температур и массив ячеек Дата / Время. Я хочу создать 4 переменные, где каждая переменная представляет разные этапы дня. Например, мне нужно создать переменные для всех температур, записанных между 09:00 - 15:00, 15: 00-21: 00, 21: 00-03: 00 и 03: 00-09: 00 для всей год.

Итак, если бы температура регистрировалась ежечасно в течение года, у меня было бы 8760 измерений, я хотел бы разбить ее на отдельную переменную, соответствующую времени, показанному выше.

clear all
StartDate = '2011-01-01 00:00';
EndDate = '2011-12-31 23:57';
Resolution = 60;
DateTime=datestr(datenum(StartDate,'yyyy-mm-dd HH:MM'):Resolution/(60*24):...
    datenum(EndDate,'yyyy-mm-dd HH:MM'),'yyyy-mm-dd HH:MM');
DateTime=cellstr(DateTime);
data = 1 + (20-1).*rand(8760,1);

Итак, в конце у меня будет переменная, в которой значения температуры между этими значениями измеряются каждый день в течение всего года.

В настоящее время я конвертирую DateTime в векторы с помощью datevec, а затем использую:

P1{i}( not(  3 <= DateVector(:,4) & DateVector(:,4) < 9 ) ) = nan;

чтобы указать разное время дня. Это лучший метод для выполнения такой задачи?

1 Ответ

0 голосов
/ 10 марта 2012

Я бы оставил ваш вектор времени как простое числовое значение как можно дольше, то есть до тех пор, пока вам действительно не понадобится создать отображение.

Так я бы заменил:

DateTime=datestr(datenum(StartDate,'yyyy-mm-dd HH:MM'):Resolution/(60*24):...
    datenum(EndDate,'yyyy-mm-dd HH:MM'),'yyyy-mm-dd HH:MM');
DateTime=cellstr(DateTime);

С:

DateTime = (datenum(StartDate,'yyyy-mm-dd HH:MM'):Resolution/(60*24):datenum(EndDate,'yyyy-mm-dd HH:MM');

И, возможно, я бы заранее вычислил время, как

Time = mod(DateTime,1)

Затем, чтобы найти все измерения в определенное время суток:

%Between 12:00 and 15:00
currentLimits = [12 15]/24;  %Two times in units of days    
mask =Time >=currentLimits(1)  &  Time >=currentLimits(1);
currentTemperatures = data(mask);

Вы также можете использовать векторы даты вместо номеров даты. Работа со строками будет намного медленнее и не принесет особой пользы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...