2012-03-10 54 views
0

我有一个温度矢量和日期/时间单元阵列。我想创建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); 

所以,最后我会有一个变量,它的温度在整个一年每天所需的时间之间。

目前我正在转换日期时间与datevec载体,然后使用:

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

指定一天的不同时间。这是做这样一个任务的最好方法吗?

回答

0

我会留下你的时间向量作为一个简单的数字,尽可能长,直到你真的需要创建一个显示。

所以我将代替:

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

您也可以使用日期向量而不是日期数字。使用字符串会慢很多,并且不会增加太多价值。