前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何利用matlab高效处理NC文件?

如何利用matlab高效处理NC文件?

作者头像
巴山学长
发布2020-05-08 11:11:29
5.2K0
发布2020-05-08 11:11:29
举报
文章被收录于专栏:巴山学长
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 数据源中的变量数据

代码语言:javascript
复制
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)

%对变量写入数据

代码语言:javascript
复制
dimidlat= netcdf.defDim(ncid,'latitude',180);      %定义名为大小为180的latitude的维度
varid=netcdf.defVar(ncid,'lat','double',dimidlat);   %创建该维度下的lat变量
netcdf.putVar(cid,varid,lat);                    %写入lat

NC文件创建与保存实例演示

代码语言:javascript
复制
%创建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格式文件进行自动插值,并可以选择插值精度,十分方便,如下是对某网格数据插值实现的。

代码语言:javascript
复制
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分)

好不好用只有用了才知道!若觉得好,别忘分享给和您一样爱学习研究的小伙伴哦!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档