需求
现有一份半小时数据,需合成日数据。
以一个站点的一年温度和辐射数据为例,第二列为月份,第三列为日,第六列为辐射,第八列为温度。
代码
%by yang,2019.4
%% 处理flux站点30分钟光合有效辐射数据
% 将半小时累加为日值
par = xlsread('flux_30_climate.xlsx','DX2004');
for i=1:12 %12个月
for j=1:31 %先假设每个月都有31天
m = find(par(:,2)==i & par(:,3)==j); %寻找par第2列为i并且第3列为j的行号,保存为m
A{1,i}(j,1)=sum(par(m,6)); %A为每个月一个元胞,第6列为辐射数据
end
end
%将元胞转为矩阵,并删除0元素(那些不足31天的)
par_d = cell2mat(A); %元胞转为矩阵
par_d((par_d==0))=[]; %删除0元素
par_d = (par_d*30*60/1000000/4.57)'; %单位转换,1mol=1000000umol,1MJ=4.57mol,转为一列
% 将日数据合成16天数据
N=ceil(366/16); %N为365除以16取大于商的最小整数
for i = 1:N-1
par_16d(i,1) = sum(par_d(1+16*(i-1):16*i,1)); %每16天数据相加
par_16d(N,1) = sum(par_d(1+16*(N-1):end,1)); %每年最后不足16天的剩余天数的数据相加
end
%% 处理flux站点30分钟温度数据
% 将半小时平均为日值
tem = xlsread('flux_30_climate.xlsx','xsbn2004');
for i=1:12 %12个月
for j=1:31 %先假设每个月都有31天
m = find(tem(:,2)==i & tem(:,3)==j); %寻找par第2列为i并且第3列为j的行号,保存为m
A{1,i}(j,1)=mean(tem(m,8)); %A为每个月一个元胞,第8列为温度数据
end
end
%将元胞转为矩阵,并删除NAN元素(那些不足31天的)
tem_d = cell2mat(A); %元胞转为矩阵
tem_d(isnan(tem_d))=[]; %删除NAN元素
tem_d = (tem_d)'; %转为一列
% 将日数据合成16天数据
N=ceil(366/16); %N为365除以16取大于商的最小整数
for i = 1:N-1
tem_16d(i,1) = mean(tem_d(1+16*(i-1):16*i,1)); %每16天的平均温度数据
tem_16d(N,1) = mean(tem_d(1+16*(N-1):end,1)); %每年最后不足16天的剩余天数的数据平均
end
网友评论