clc
clear% 读入.dat文件到变量temp_month
temp_month=dlmread('F:GISyuancru_ts4.02.p.dat'); % dlmread function read ASCII-delimited file of numeric data into matrix% 将二维矩阵temp_month(43200*720)升为三维矩阵temp_year_3d(4320*720*10)
temp_year2=mat2cell(temp_month,[4320 4320 4320 4320 4320 4320 4320 4320 4320 4320],[720]); %10个4320,表示10年
temp_year_3d=cat(3,temp_year2{:});[rows,columns,pages]=size(temp_year_3d); %返回三维矩阵行、列、页数% 对三维矩阵temp_year_3d(4320*720*10)的每一页拆分成360*720*12大小并求各页平均,得到全球0.5°逐年年均温网格
for page=1:pagestemp_month2=mat2cell(temp_year_3d(:,:,page),[360 360 360 360 360 360 360 360 360 360 360 360],[720]); %12个360,表示12个月temp_month_3d=cat(3,temp_month2{:});temp_year(:,:,page)=mean(temp_month_3d,3); %temp_year(:,:,:)为全球1901~1910年逐年平均气温ASCII数据
end% *************读新的数据时修改以下代码 num2str(page+1900)****************************
% 将二维数组temp_year(:,:,page)(360*720)分别写入,,
for page=1:pagesstr=['F:/GIS/yuan/globe_temp/' num2str(page+2000) '.txt'] % num2str(page+1900)前后都要空一格fid=fopen(str,'wt');%% 插入文件头fprintf(fid,'%sn','ncols 720');fprintf(fid,'%sn','nrows 360');fprintf(fid,'%sn','xllcorner -180.00');fprintf(fid,'%sn','yllcorner -90.00');fprintf(fid,'%sn','cellsize 0.50');fprintf(fid,'%sn','NODATA_value -999');%% 写入数据 input=flipud(temp_year(:,:,page)); % 注意这里要用到flipud()函数,将数组上下颠倒,这样根据文件头读入的数据才是对的,另外再次印证MATLAB真的很强大[row_temp,col_temp]=size(input);for row=1:row_tempfor col=1:col_tempif col==col_tempfprintf(fid,'%gn',input(row,col));elsefprintf(fid,'%gt',input(row,col));endendendfclose(fid);
end
figure %提示运行结束
本文发布于:2024-01-31 19:51:15,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170670188030960.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |