| 
 | 
	
    
 
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册  
 
x
 
一、R2008b中nc常用命令. J$ M1 T5 ~: P8 O 
我以R2008b为例,下载上述地址的nc工具箱加载到路径下(详细的到网上搜,有很多详细的过程),在这里只介绍最常用的命令给新手。 
, R( u# q$ M/ _1.ncdump filename 
& ~7 y% K- X9 Z3 a. q$ Bfilename是你的文件名,注意如果不是当前路径请写绝对路径,后缀名要有.nc。3 j$ o, z/ T0 y% X! P 
这个命令是用来查看nc文件的信息。具体的你可以下载个sst的nc文件读读看就知道了。一般我们需要从中了解经度、纬度它们的范围和网格点数,还有时间,最后就是变量。变量一般需要知道它的单位,缺测值(missing value),scale factor。因为这些影响你最后的出图。缺测值需要设置成NaN,Matlab对非数不作处理。乘上scale才是正确的数值,避免出现出图的数值多了10倍或少了10倍的情况。7 p) \* ^1 U& f4 y 
2.ncload filename6 f! t" V8 \; l9 [5 A 
这个命令是用于载入所有变量到workspace中。载入后就可以对数据进行处理和绘图了。这里需要注意的是,通常要对陆地设为NaN,所以要通过ncdump知道缺测值的数,用于改成NaN,Matlab不作处理。还有就是需要你对scale做处理成真实的数值。这里面介绍简便的方法对NaN和scale做处理(如果你没ncdump的话) 
% U6 C. [8 g- k载入数据后输入:* r+ C* C) A" F" B 
global nctbx_options;" W8 s# I2 c7 Y 
nctbx_options.theAutoNaN = 1; 
/ g+ O( J- }( D+ H! p0 Fnctbx_options.theAutoscale = 1; 
4 V$ v; q) t# H, X4 B& t这三行命令就可以很方便的设置NaN和scale了。 
: B  V5 |. [8 m  ?% j, H具体的在你R2008b中help netcdf可查看所有命令使用方法。' r& P7 i( M. b 
R2008b常用命令就介绍到这。其它的help~" o6 D) u( g3 I6 ? 
7 {* S# o3 t& D$ W4 J 
二、R2012a中nc常用命令 
# r! F; D& I9 _9 ^高版本的Matlab自带nc工具箱。2012以上的版本肯定都自带了。所以不用再下载工具箱了,直接用它里面的函数。但对于用惯以前nc命令的人来说又要重新学习新的nc命令,所以在这里我把最常用的命令列出来,能解决绝大多数问题。6 Q; \# Z6 z1 w7 u" `, B/ ] 
1. ncdisp filename(Display contents of NetCDF data source in Command Window) 
0 T! D  D5 m2 D+ y8 D- J0 j, c4 ^如果你就想查看nc文件的信息,想和ncdump一样。在2012a中用ncdisp命令就能查看了。用法和ncdump一样。具体其他用法查看help或者doc ncdisp. 
  Z" s- n  K# P& }- c! H4 r2. ncread(Read data from variable in NetCDF data source) 
3 C0 f- @' F8 osyntax: 
, ?% U4 X9 c  \" O  qvardata = ncread(source,varname)* y6 L, c* u2 c3 }4 H- X* X9 N 
vardata = ncread(source,varname,start,count,stride): R- p: Z5 `0 s$ o( h+ l7 W 
直接解释第二条语法: 
3 B8 T/ K$ u/ a; e% H3 Rvardata是你自己想设的变量名;source是你的nc文件(字符型);varname是你想载入的变量名(字符型);start是你这个变量想从哪开始,如[1 1]表示二维变量从最开始读;count表示读入变量的数量,如[50 50]表示读入第一维50个数,第二维50个数;stride意思就是步长,默认的是1,但你也可以设置跳着读数据,如[2 2]表示每间隔两个数读数据。% W0 F/ c1 c2 l9 A0 ?: C8 K 
 
( Y5 A0 O& C( ^9 d0 Z; M# Q如何找到我们想要从哪个经纬度读数据呢?我们可以把lon和lat载入到工作空间后结合find函数使用。 
5 N2 R9 Q4 v$ C( s% _) U/ L比如:我们想要读取经度是120~290度,纬度是-30~30度的数据。可参考如下程序: 
% i/ {1 M( L# e4 B/ L, W* w- `) }: v7 Llon=ncread(...,'lon');$ B. R& Z! g' A& T* _& L 
lat=ncread(...,'lat');5 E9 e9 N2 l+ z- h 
a=find(lon>=120 & lon<=290);8 N6 S0 q4 O! W6 l8 J 
b=find(lat>=-30 & lat<=30);    % a和b作为经度和纬度的指针 
- D  y- P2 ?& Vlon_num=length(a);1 d8 H4 X( a: T 
lat_num=length(b); 
: e1 F8 N3 R( Vsst=ncread(...,'sst',[a(1) b(1) ...],[lon_num lat_num ...]);  % 假如是读取SST数据 
: h+ }# D# B7 k% [3 ]& b( k$ ^8 E+ q% ? 
基本就介绍完了。 
: e  A0 r/ i7 yncread看似比ncload麻烦,但是如果你有大量的数据都在一个nc文件中,直接ncload会把所有的variable都读进来,但是有时我们并不想要所有的变量,而且这样读进来的速度会很慢,大大消耗资源。当然R2008b也有相应函数能实现2012a上面的功能,这就需要我们自己看help了。 
) P) Z" v# b% |* ~" Y9 o$ L |   
 
 
 
 |