nc文件的读取
NCEP:
clc;clear all;
%nc批量读取的数据
datadir1='D:\data\ncep_monthly\pressure\';%指定批量数据所在的文件夹
filelist1=dir([datadir1,'air.mon.mean.nc']);%指定批量数据的类型
minlat=-90;maxlat=90;minlon=0;maxlon=357.5;
filename1=[datadir1,filelist1.name];
ncid1=netcdf.open(filename1,'NC_NOWRITE');%打开nc文件
lat=ncread(filename1,'lat');%读入变量lat
lon=ncread(filename1,'lon');%读入变量lon
la=find((lat<=maxlat)&(lat>=minlat));
lo=find((lon<=maxlon)&(lon>=minlon));
latitude=lat(la,:);
longitude=lon(lo,:);
t_1= ncread(filename1,'air');
t(:,:,:,:)=t_1(lo,la,1:12,:);
netcdf.close(ncid1);%关闭nc文件
fileID1=fopen('airtemp.bin','w');
fwrite(fileID1,t,'single');
fclose(fileID1);
ECMWF:
clc;%清屏
clear all;%清空datadir1='D:\sunxy\data\1979-201805_monthly_nc\1\';%指定批量数据所在的文件夹
filelist1=dir([datadir1,'sounding*.nc']);%指定批量数据的类型
k1=length(filelist1);
% 读取数据
minlat=-90;maxlat=90;minlon=0;maxlon=360;
n=1;
fors=1:k1
filename=[datadir1,filelist1(s).name];
ncid=netcdf.open(filename,'NC_NOWRITE');%打开nc文件
lat=ncread(filename,'latitude');%读入变量lat
lon=ncread(filename,'longitude');%读入变量lon
time=ncread(filename,'time');
l=length(time);
la=find((lat<=maxlat)&(lat>=minlat));
lo=find((lon<=maxlon)&(lon>=minlon));
latitude=lat(la,:);
longitude=lon(lo,:);
w_1= ncread(filename,'w');
w(:,:,:,n:n+l-1)=w_1(lo,la,37:-1:11,:);
netcdf.close(ncid);%关闭nc文件
n=n+l
t_1=[];
end;
fileID5=fopen('D:\sunxy\study\Q1Q2\Fortran热源\glo\1\omega.bin','w');
fwrite(fileID5,w,'single');
fclose(fileID5)
注意:用MATLAB读取ECMWF文件,气压层会倒置。
文件的输出
1. 输出成txt
fid=fopen(strcat('I:\D\两湖地区\模拟结果\站点气象场\corr_for_tylor.txt'),'w');%需要改文件名称的地方
[mm,nn]=size(corr);
for im=1:mm
for in=1:nn
if in==nn
fprintf(fid,'%g\n',corr(im,in));
else
fprintf(fid,'%g\t',corr(im,in));
end
end
end
fclose(fid);
注:若\n换行失败,可换成\r\n
fprint的一些参数
\t tab键,水平制表符
\n 生成新行
\r 回车
%d 整数
%e 实数:科学计数法
%f 实数:小数形式
%g 更紧凑的数字形式,无尾随0
%s 输出字符串
2. 输出成csv
csvwrite(strcat('meteo_',num2str(iyear),'-,station{istation},'.csv'),city_data);