【发布时间】:2013-02-26 15:46:18
【问题描述】:
我有一个年度数据集:
Jday = datenum('2009-01-01 00:00','yyyy-mm-dd HH:MM'):1/24:...
datenum('2009-12-31 23:00','yyyy-mm-dd HH:MM');
DateV = datevec(Jday);
dat = 1+(10-1).*rand(length(Jday),10);
noise = 10*sin(2*pi*Jday/32)+20;
for i = 1:size(dat,2);
dat2(:,i) = dat(:,i)+noise';
end
表示通过水柱记录的温度测量值。我想计算每天 06:00 到 18:00 之间的温度范围,以便最终得到每个深度的 365 个值,因此最终矩阵为 365x10。
我可以通过以下方式指定个别日期:
[~,~,b] = unique(DateV(:,2:3),'rows');
但我不知道如何只考虑上午 06:00 到晚上 18:00 之间记录的值。谁能提供一些关于这样做的最佳方法的信息?
修正:略长的答案
Jday = datenum('2009-01-01 00:00','yyyy-mm-dd HH:MM'):1/24:...
datenum('2009-12-31 23:00','yyyy-mm-dd HH:MM');
DateV = datevec(Jday);
dat = 1+(10-1).*rand(length(Jday),10);
noise = 10*sin(2*pi*Jday/32)+20;
for i = 1:size(dat,2);
dat2(:,i) = dat(:,i)+noise';
end
for i = 1:size(dat2,2);
data = [DateV(:,4),dat2(:,i)]; % obtain all hours from DateV array
dd = find(data(:,1) == 6); % find 06:00
dd(:,2) = find(data(:,1) == 18); % find 18:00
for ii = 1:size(dd,1);
result(ii,i) = range(data(dd(ii,1):dd(ii,2),2)); % calculate range
end
end
【问题讨论】:
-
我不明白你想如何只使用一个值来表示温度范围。
-
温度范围在每天 06:00 到 18:00 之间,因此有 13 个值
-
这还不清楚。您希望得到一个 365×10 矩阵。我推断 365 对应天数,10 是测量次数。这个 06:00-18:00 的温度在哪里起作用?是否要对该时间段内的值进行平均?
-
修正矩阵。如果您查看变量 DateV,它将以小时为单位显示一天中的时间“DateV(:,4)”,因此对于第一天,即 2009-01-01,我想计算第 7 行和第 18 行之间的温度范围即分别为 06:00 和 18:00。因此,对于第一天和第一次测量(深度),我可以通过以下方式计算:range(dat2(7:18,1)) 然后我需要对第二列然后第三列重复此操作,依此类推,然后重复此过程从第 25 行开始的第二天。这是否更清楚?
-
我想是的。我已经发布了答案,希望对您有所帮助。
标签: matlab