MATLAB数据处理:NC文件批量读取

1.查看nc文件中变量

% ncdisp(source) 显示组、维度、变量定义,以及所有属性
ncdisp('2001.nc');

运行结果如下:

Source:
           F:\river1\2001.nc
Format:
           classic
Global Attributes:
           Conventions         = 'COARDS'
           History             = 'created by wgrib2'
           GRIB2_grid_template = 0
Dimensions:
           latitude  = 682
           longitude = 662
           time      = 365   (UNLIMITED)
Variables:
    latitude         
           Size:       682x1
           Dimensions: latitude
           Datatype:   double
           Attributes:
                       units     = 'degrees_north'
                       long_name = 'latitude'
    longitude        
           Size:       662x1
           Dimensions: longitude
           Datatype:   double
           Attributes:
                       units     = 'degrees_east'
                       long_name = 'longitude'
    time             
           Size:       365x1
           Dimensions: time
           Datatype:   double
           Attributes:
                       _FillValue                 = 9.999e+20
                       units                      = 'seconds since 1970-01-01 00:00:00.0 0:00'
                       long_name                  = 'verification time generated by wgrib2 function verftime()'
                       reference_time             = 978307200
                       reference_time_type        = 2
                       reference_date             = '2001.01.01 00:00:00 UTC'
                       reference_time_description = 'analyses, reference date is variable, min found reference date is given'
                       time_step_setting          = 'auto'
                       time_step                  = 86400
    var1_0_7_no_level
           Size:       662x682x365
           Dimensions: longitude,latitude,time
           Datatype:   single
           Attributes:
                       _FillValue = 9.999000260554009e+20
                       short_name = 'var1_0_7_no_level'
                       long_name  = 'desc'
                       level      = 'no_level'
                       units      = 'unit'

可以看到,本文件中有经度、纬度、时间、var1_0_7_no_level(其实是河流流量)数据。
var1_0_7_no_level是三维数组(662×682×365,经度×纬度×时间),由于本文件为grid2转格式生成的nc文件,一般的文件units哪里都有这个变量的单位如(立方米/s)

2.查看完变量之后对变量进行读取

% vardata = ncread(source,varname)
runoff = ncread('2001.nc','var1_0_7_no_level');

3.由于需要读取很多年的数据,文件夹下有很多nc文件,此时,批量读取文件把他们存在一个结构体之中

% nc文件所在路径
Path='F:\river1';
% 显示文件夹下所有符合后缀名为.nc文件的完整信息
File=dir(fullfile(Path,'*.nc'));
% 提取符合后缀名为.nc的所有文件的文件名,转换为n行1列             
FileNames={File.name}';                     
FNcount=length(FileNames);  
% 批量读取-这里提供两种方式
% 方法1 每年一个变量存储
% 数据覆盖的年份
s_year = 2001:2020; 
for  i = 1:FNcount
    val_struct = ncread(char(FileNames(i)),'var1_0_7_no_level');
    % 变量名随循环改变 scs_rd_2001,scs_rd_2002......
    eval(['scs_rd_' num2str(s_year(i)) '= val_struct;']);
end
% 方法2 存成struct
% 个人喜欢方法2,把所有年的变量存到一个struct里面很方便
% 但是数据量太多内存不够可能跑到一半卡了阿巴阿巴
for i = 1:FNcount
    scs_rd(i).year = s_year(i);
    scs_rd(i).rd = ncread(char(FileNames(i)),'var1_0_7_no_level');
end
% 最后的最后把他们save到mat里面,记得把经纬度数据也存进去~
  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值