matlab读取nc文件后,工作区出现读取好的数据,想通过筛选第二列变量,然后根据筛选条件进而获取其他变量,请问要如何编写代码?
首先,需要使用ncread函数读取nc文件,如下所示:
data = ncread(‘filename.nc’);
然后,可以使用find函数查找第二列变量中满足筛选条件的值,如下所示:
indices = find(data(:,2) > threshold);
最后,可以使用索引来获取其他变量,如下所示:
other_variables = data(indices,:);
%% 显示结构
% ncdisp(ncFilePath);%显示nc文件的所有结构,以便大概了解里面的内容
% ncdisp(ncFilePath,‘evap’);%显示指定变量的内容,注意一定要是变量variables才可以
% ncdisp(ncFilePath,’/’,‘min’);%简单显示结构以及定义
% ncdisp(ncFilePath,’/’,‘full’);%全部显示所有结构和定义信息
%% 读取变量值
% ncid = netcdf.open(ncFilePath,‘NOWRITE’); %打开nc文件返回索引ID
% [ndims,nvars,ngglobalatts,unlimdimid] = netcdf.inq(ncid);%获取维数,变量数,全局属性数量(此处ncid从0开始为第一个变量)
% [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,0); %根据变量索引号获取变量的名称
%var=ncread(ncFilePath,‘varname’);%读取变量,ncread读出结果为真实值,即自动将fillvalue记为nan,vardata*scale+offset
%% 显示数据
% pcolor(lat,lon,evap1);
% [x,y]=meshgrid(lon,lat);%根据经纬度信息产生格网,284列(经度),164列(纬度)
% phandle=pcolor(x,y,evap1’);%显示一个矩阵,其中x,y,evap1的行列数必须一致。类似surface函数
% colorbar
%%time
在处理气象nc格式数据时,时间变量往往不是已YYYYMMDD格式给出日期,而是距某一天(如1900年1月1日)XXX小时或XXX日。
可由以下代码将nc的时间变量转为日期:
t0 = datetime(1900,1,1);
date_yyymmdd = t0 + double(time(😃)/24; %time为距1900年1月1日00时的小时数一维数组
%转回nc格式
time=time_matlab;
time_nc=(time-datenum(‘1900-01-01 00:00:00.0’))*24;
eg:
dat_filename=[path,'MOD11A1.006_1km_aid0001.nc'];
ncid = netcdf.open(dat_filename,'NOWRITE');
%ncdisp(dat_filename) %查看nc文件结构
[~,nvars,~,~] = netcdf.inq(ncid);%获取变量数
for i=1:nvars %vars
varname{i}= netcdf.inqVar(ncid,i-1);%id从0开始
eval([varname{i},'=ncread(dat_filename,varname{i});']);
end
netcdf.close(ncid)
clear i
%%写入nc
% ---------------------------- DEFINE THE FILE --------------------------- %
ncid = netcdf.create(‘f:\ncl\ecco_ekman_mon_mean1.nc’,‘CLOBBER’);
%创建一个存放数据的nc文件
%-----------------------------define dimension-----------------------------%
%因为有个变量是三维的,所以定义了三个维度,其它一维二维可视具体情况定义
dimidx = netcdf.defDim(ncid,‘lat’,242);
dimidy = netcdf.defDim(ncid,‘dep’,50);
dimidz = netcdf.defDim(ncid,‘time’,12);
%----------------------------define new variables---------------------------------%
varid = netcdf.defVar(ncid,‘strf’,‘double’,[dimidx dimidy dimidz]);
varid2 = netcdf.defVar(ncid,‘lat’,‘double’,[dimidx]);
varid3 = netcdf.defVar(ncid,‘dep’,‘double’,[dimidy]);
%---------------------------define attributes of the new variables--------------%
netcdf.putAtt(ncid,varid,‘units’,‘Sv’); %单位信息和long_name,其它的信息可依此定义
netcdf.putAtt(ncid,varid2,‘units’,‘degress_north’);
netcdf.putAtt(ncid,varid3,‘units’,‘m’);
netcdf.putAtt(ncid,varid,'long_name','The Meridional streamfunction ');
netcdf.putAtt(ncid,varid2,'long_name','Latitude');
netcdf.putAtt(ncid,varid3,'long_name','Depth');
netcdf.endDef(ncid);
%--------------------------给新变量赋值-------------------------------------------%
netcdf.putVar(ncid,varid,fail_mon_mean);
netcdf.putVar(ncid,varid2,lat);netcdf.putVar(ncid,varid3,d);
netcdf.close(ncid);