|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
一、R2008b中nc常用命令 Z1 G( U* v7 w# n
我以R2008b为例,下载上述地址的nc工具箱加载到路径下(详细的到网上搜,有很多详细的过程),在这里只介绍最常用的命令给新手。/ y; F0 Q6 C2 {- W; t5 T7 C
1.ncdump filename
/ ~0 m, _4 q1 R$ mfilename是你的文件名,注意如果不是当前路径请写绝对路径,后缀名要有.nc。2 u9 P3 s9 T: s- {
这个命令是用来查看nc文件的信息。具体的你可以下载个sst的nc文件读读看就知道了。一般我们需要从中了解经度、纬度它们的范围和网格点数,还有时间,最后就是变量。变量一般需要知道它的单位,缺测值(missing value),scale factor。因为这些影响你最后的出图。缺测值需要设置成NaN,Matlab对非数不作处理。乘上scale才是正确的数值,避免出现出图的数值多了10倍或少了10倍的情况。/ w! Z+ e! p! J# e9 c; w7 m# a
2.ncload filename
0 t* s: z& |% t这个命令是用于载入所有变量到workspace中。载入后就可以对数据进行处理和绘图了。这里需要注意的是,通常要对陆地设为NaN,所以要通过ncdump知道缺测值的数,用于改成NaN,Matlab不作处理。还有就是需要你对scale做处理成真实的数值。这里面介绍简便的方法对NaN和scale做处理(如果你没ncdump的话)
6 d3 l! G* `# o& A: J8 W载入数据后输入:, `2 x# j1 s9 a1 q! X
global nctbx_options;" r/ s6 w' Q/ f
nctbx_options.theAutoNaN = 1;
9 Q1 v" k1 u" ?! z3 I7 L9 J5 hnctbx_options.theAutoscale = 1;
$ @0 B& f: K8 s7 q* b2 r这三行命令就可以很方便的设置NaN和scale了。1 b, q0 j3 `& S" Y$ v5 u
具体的在你R2008b中help netcdf可查看所有命令使用方法。
* u1 O2 s# n y5 VR2008b常用命令就介绍到这。其它的help~! r. U% P" i* k4 O. U& P
$ W; O: c$ \7 T二、R2012a中nc常用命令
9 I* q2 H: j- K3 U5 J% G高版本的Matlab自带nc工具箱。2012以上的版本肯定都自带了。所以不用再下载工具箱了,直接用它里面的函数。但对于用惯以前nc命令的人来说又要重新学习新的nc命令,所以在这里我把最常用的命令列出来,能解决绝大多数问题。
' E( H$ Q# J- a: s1 v, r4 p1. ncdisp filename(Display contents of NetCDF data source in Command Window). Y, Z8 a' P/ x5 L2 O7 ]
如果你就想查看nc文件的信息,想和ncdump一样。在2012a中用ncdisp命令就能查看了。用法和ncdump一样。具体其他用法查看help或者doc ncdisp.
! v4 M3 T4 J9 w' Y$ R& V2. ncread(Read data from variable in NetCDF data source)- P& J0 q: w6 D! ^ t
syntax:
+ n. W: U$ G; U6 R) M. V- Wvardata = ncread(source,varname)/ r& ^* z# h z. T5 Y
vardata = ncread(source,varname,start,count,stride)
) j- i, u6 Y! _直接解释第二条语法:# @* N. Q( G2 B0 l* w
vardata是你自己想设的变量名;source是你的nc文件(字符型);varname是你想载入的变量名(字符型);start是你这个变量想从哪开始,如[1 1]表示二维变量从最开始读;count表示读入变量的数量,如[50 50]表示读入第一维50个数,第二维50个数;stride意思就是步长,默认的是1,但你也可以设置跳着读数据,如[2 2]表示每间隔两个数读数据。- `0 j R0 Q" `+ ?1 J
/ J! P# |0 m8 ?+ I7 ^& L5 V如何找到我们想要从哪个经纬度读数据呢?我们可以把lon和lat载入到工作空间后结合find函数使用。
6 A+ z# |( Q+ y比如:我们想要读取经度是120~290度,纬度是-30~30度的数据。可参考如下程序:
- Y- @. t3 I7 H6 G& F6 Xlon=ncread(...,'lon');
: [" s5 T* R* {# w$ R) slat=ncread(...,'lat');& C: N; _$ y0 G% W- A0 Y- v3 G
a=find(lon>=120 & lon<=290);
3 z1 s0 H9 s1 A( n5 xb=find(lat>=-30 & lat<=30); % a和b作为经度和纬度的指针
0 Q6 i5 _0 h. s6 e7 c7 g# Alon_num=length(a);
. x+ \5 a: R( W4 J# @0 a; Mlat_num=length(b);
5 ]! p: |6 R( o" G" j& i! Qsst=ncread(...,'sst',[a(1) b(1) ...],[lon_num lat_num ...]); % 假如是读取SST数据0 G2 ] A& T+ v5 h8 _0 |( C: ]
% W% L# x2 W! ^: x5 F0 G+ e! D9 h# S基本就介绍完了。
$ ]# C1 P d: i& T) i+ Zncread看似比ncload麻烦,但是如果你有大量的数据都在一个nc文件中,直接ncload会把所有的variable都读进来,但是有时我们并不想要所有的变量,而且这样读进来的速度会很慢,大大消耗资源。当然R2008b也有相应函数能实现2012a上面的功能,这就需要我们自己看help了。
+ v% N* m9 k4 I |
|