matlab读取nc文件

matlab读取nc文件后,工作区出现读取好的数据,想通过筛选第二列变量,然后根据筛选条件进而获取其他变量,请问要如何编写代码?

首先,需要使用ncread函数读取nc文件,如下所示:

data = ncread(‘filename.nc’);

然后,可以使用find函数查找第二列变量中满足筛选条件的值,如下所示:

indices = find(data(:,2) > threshold);

最后,可以使用索引来获取其他变量,如下所示:

other_variables = data(indices,:);

  • 请看👉 :matlab读取.nc格式文件
  • 除此之外, 这篇博客: MATLAB读取文件中的 nc数据读写 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • %% 显示结构
    % 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);