找回密码
 注册
关于网站域名变更的通知
查看: 1050|回复: 1
打印 上一主题 下一主题

Matlab读取nc文件常用命令总结

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-27 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
一、R2008b中nc常用命令- A" f( i0 _1 c
我以R2008b为例,下载上述地址的nc工具箱加载到路径下(详细的到网上搜,有很多详细的过程),在这里只介绍最常用的命令给新手。
- s$ r- ^) `, n' I1.ncdump filename( Q" h' m7 e* a
filename是你的文件名,注意如果不是当前路径请写绝对路径,后缀名要有.nc。' @2 J! c& k% Y' I; J4 d& Y
这个命令是用来查看nc文件的信息。具体的你可以下载个sst的nc文件读读看就知道了。一般我们需要从中了解经度、纬度它们的范围和网格点数,还有时间,最后就是变量。变量一般需要知道它的单位,缺测值(missing value),scale factor。因为这些影响你最后的出图。缺测值需要设置成NaN,Matlab对非数不作处理。乘上scale才是正确的数值,避免出现出图的数值多了10倍或少了10倍的情况。
* Z. M& Z+ m( q& D# [" T2.ncload filename
# ~7 @) O' ^; Z这个命令是用于载入所有变量到workspace中。载入后就可以对数据进行处理和绘图了。这里需要注意的是,通常要对陆地设为NaN,所以要通过ncdump知道缺测值的数,用于改成NaN,Matlab不作处理。还有就是需要你对scale做处理成真实的数值。这里面介绍简便的方法对NaN和scale做处理(如果你没ncdump的话)
# x0 N- U) Z2 _* u% ]3 o( _载入数据后输入:
+ b4 J" A+ H# z7 D1 a- G7 M( t2 I3 pglobal nctbx_options;8 k1 b  w# `' l9 b. v2 N, I% h
nctbx_options.theAutoNaN = 1;
+ `: _  R/ T: p; w% I& T6 \5 f* Anctbx_options.theAutoscale = 1;# b( ^" x6 u1 U# f
这三行命令就可以很方便的设置NaN和scale了。5 ]+ e2 b; K* I3 g# z& G
具体的在你R2008b中help netcdf可查看所有命令使用方法。
' v% u$ V; w# }. \  A' XR2008b常用命令就介绍到这。其它的help~, F* c( D7 N4 m- [. w% q3 V2 ^

, m1 n: F/ f- c3 p) `二、R2012a中nc常用命令
) k  `, n4 E4 F& w$ n高版本的Matlab自带nc工具箱。2012以上的版本肯定都自带了。所以不用再下载工具箱了,直接用它里面的函数。但对于用惯以前nc命令的人来说又要重新学习新的nc命令,所以在这里我把最常用的命令列出来,能解决绝大多数问题。) v5 O- v: M9 s, _9 M, N5 w; s
1. ncdisp filename(Display contents of NetCDF data source in Command Window)
* H5 S3 W& j1 `1 B% `8 i* h1 X. d如果你就想查看nc文件的信息,想和ncdump一样。在2012a中用ncdisp命令就能查看了。用法和ncdump一样。具体其他用法查看help或者doc ncdisp.1 A( i# ~) ^3 u
2. ncread(Read data from variable in NetCDF data source)* z- Z) c$ k- G1 t" ^- R6 u. u
syntax:
6 u6 B% P" j, \2 }& F& S7 J& _vardata = ncread(source,varname)- J3 U7 e. c" J( R1 a
vardata = ncread(source,varname,start,count,stride)
1 n, N( ?( U# \! Z直接解释第二条语法:
" u8 M0 Q  l7 m5 uvardata是你自己想设的变量名;source是你的nc文件(字符型);varname是你想载入的变量名(字符型);start是你这个变量想从哪开始,如[1 1]表示二维变量从最开始读;count表示读入变量的数量,如[50 50]表示读入第一维50个数,第二维50个数;stride意思就是步长,默认的是1,但你也可以设置跳着读数据,如[2 2]表示每间隔两个数读数据。
2 J( A7 y) {1 {' g( j) U, Q3 ]$ i5 K# b6 @
如何找到我们想要从哪个经纬度读数据呢?我们可以把lon和lat载入到工作空间后结合find函数使用。
" z: Y, y1 N9 V& L7 O比如:我们想要读取经度是120~290度,纬度是-30~30度的数据。可参考如下程序:
4 U4 j/ Z" O1 _: X; a2 glon=ncread(...,'lon');
* e# h3 U# y+ ^$ M0 m9 Dlat=ncread(...,'lat');8 c: z/ o$ x9 p# S, I' f2 q
a=find(lon>=120 & lon<=290);
, C2 R  K( L' |5 O( z' fb=find(lat>=-30 & lat<=30);    % a和b作为经度和纬度的指针
9 j( ^+ @: Y1 }) h4 Klon_num=length(a);
+ F9 O* h5 ?/ ?* `' g" z% C6 Ulat_num=length(b);3 `, y% s  X' b9 q" l0 f+ E8 ^
sst=ncread(...,'sst',[a(1) b(1) ...],[lon_num lat_num ...]);  % 假如是读取SST数据
6 n( e  q" a+ @. L  k; Y/ F  T; R- _% u; r5 C' e# G/ }
基本就介绍完了。3 O8 B3 E! d# z) D" ]8 X. F
ncread看似比ncload麻烦,但是如果你有大量的数据都在一个nc文件中,直接ncload会把所有的variable都读进来,但是有时我们并不想要所有的变量,而且这样读进来的速度会很慢,大大消耗资源。当然R2008b也有相应函数能实现2012a上面的功能,这就需要我们自己看help了。
4 @; b9 ?$ q& v! L, U2 }+ b- ~5 ^

该用户从未签到

2#
发表于 2020-4-27 13:27 | 只看该作者
Matlab读取nc文件常用命令总结
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-22 21:48 , Processed in 0.125000 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表