我有一个温度矢量和日期/时间的单元格数组。我想创建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将DateTime转换为向量,然后使用:
P1{i}( not( 3 <= DateVector(:,4) & DateVector(:,4) < 9 ) ) = nan;
指定一天中的不同时间。这是完成这项任务的最佳方法吗?
答案 0 :(得分: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);
您还可以使用日期向量代替日期数字。使用字符串会慢很多,并没有真正增加很多价值。