本文由SimpleHappy (QQ:129****987)投稿,在此公众号特别感谢!
NetCDF(network Common Data Form)网络通用数据格式是由美国大学大气研究协会(University Corporation for Atmospheric Research,UCAR)的Unidata项目科学家针对科学数据的特点开发的,是一种面向数组型并适于网络共享的数据的描述和编码标准。目前,NetCDF广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作 NetCDF 数据集。它能过记录多维度的格网数据,所以有必要通过matlab提取 NC文件数据。此外,我们可以把格网数据存储到NC文件保存。
一、NC文的读取
ncread语法规则
vardata = ncread(source,varname)
vardata = ncread(source,varname,start,count,stride)
功能:读取 NetCDF 数据源中的变量数据
1 2 3 | NcPath='01.nc'; lon1 =ncread(NcPath,'lon'); %读取lon所有数据 lon2 =ncread(NcPath,'lon',2,3,4); %从lon[2]开始,按间隔4,共读取3个数据 |
二、创建NC文件
(1) netcdf语法规则
1. ncid = netcdf.create(filename, mode)
①作用:创建新的NetCDF file
②常用mode:
'CLOBBER':覆盖现有文件
'NOCLOBBER':不覆盖现有文件
'SHARE':更新现有文件
③返回值ncid是文件的ID
2. ncid = netcdf.open(filename, mode)
①作用:打开NetCDF file
②常用mode:
'WRITE':读写
'SHARE':更新
'NOWRITE':只读
3. netcdf.endDef(ncid)
作用:结束NetCDF file定义模式
4. netcdf.close(ncid)
作用:关闭NetCDF file
(2) 维函数与变量函数
dimid = netcdf.defDim(ncid,dimname,dimlen)
%定义NetCDF 维度
varid = netcdf.defVar(ncid,varname,xtype,dimids)
%创建NetCDF 变量
netcdf.putVar(ncid,varid,data)
%对变量写入数据
1 2 3 | dimidlat= netcdf.defDim(ncid,'latitude',180); %定义名为大小为180的latitude的维度 varid=netcdf.defVar(ncid,'lat','double',dimidlat); %创建该维度下的lat变量 netcdf.putVar(cid,varid,lat); %写入lat |
NC文件创建与保存实例演示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | %创建NetCDF file cid=netcdf.create('01.nc', 'CLOBBER'); %待写入数据 lon=-180:5:180; lat=-87.5:2.5:87.5; m=length(lon); n=length(lat); h=rand(n,m); %定义维度 dimidlon=netcdf.defDim(cid,'lon',m); dimidlat=netcdf.defDim(cid,'lat',n); %创建变量 varid1=netcdf.defVar(cid,'lon','double',dimidlon); %一维 varid2=netcdf.defVar(cid,'lat','double',dimidlat); %一维 varid3=netcdf.defVar(cid,'h','double',[dimidlon dimidlat]); %二维 %结束NetCDF file定义模式 netcdf.endDef(cid); %写入变量 netcdf.putVar(cid,varid1,lon); netcdf.putVar(cid,varid2,lat); netcdf.putVar(cid,varid3,h'); %关闭NetCDF file netcdf.close(cid); |
三、拓展:利用GMT对NC文件中的格网数据插值
可以利用GMT对生成的.nc格式文件进行自动插值,并可以选择插值精度,十分方便,如下是对某网格数据插值实现的。
1 2 3 4 5 6 | gmt begin Test png gmt basemap -JX15c/8c -R-180d/180d/-87.5d/87.5d -Bx60 -By30 -BWSrt gmt makecpt -Cjet -T0/70/5 gmt grdimage 01.nc -E1000 %核心 gmt colorbar -C -Bx10 -By+l"TECu" -DJMR+v+o1c/0c gmt end |
结果图
本例之所以提到GMT,一方面是因为GMT绘图质量比matlab高,且代码简单;另一方面,matlab可以和GMT联合编程,有兴趣的小伙伴可以学习GMT。
祝大家五一节快乐!
本文推荐指数:☆ (5/10分)
好不好用只有用了才知道!若觉得好,别忘分享给和您一样爱学习研究的小伙伴哦!
长按加入资源分享园地星球
互动专区
回复“微信”加入微信群;公众号中回复“qq”加入QQ群;回复“共享”加入原创代码共享QQ群;回复“投稿”与大家分享智慧;回复“下载”加入各种资源下载QQ群!
如需转载,请在公众号中回复“转载”获取授权,未经授权擅自搬运抄袭的,必将追究其责任!
参考资料:
[1] https://baike.baidu.com/item/netCDF/6000434?fr=aladdin
[2] https://ww2.mathworks.cn/help/matlab/ref/ncread.html
[3] https://ww2.mathworks.cn/help/matlab/network-common-data-form.html?s_tid=CRUX_lftnav
往期回顾>>>>>>
200多款plot/plot3自定义marker任你选
打造一款属于自己matlab版屏幕取色器
资源分享园地星球欢迎您的加入