NCL简单语法、读取nc文件
[这个贴子最后由first在 2007/04/14 12:42pm 编辑]
进入ncl的两种方法:
1.直接在shell命令行输入ncl,就能进入ncl,然后一条一条执行命令,这种是交互式的执行方式。
2.编好一个ncl脚本,在shell命令行输入ncl filename.ncl就可以了,这种是批处理的执行方式。
一些特殊的行:注释行;
续行 \
数据类型:
数值型:double(64 bit) , float(32 bit), long(32 bit), integer(32 bit), short(16 bit),byte(8 bit),不支持complex。
非数值型:字符串(string)、字符(character)、图形(graphic)、文件(file)、逻辑型(logical)、列表(list)
运算符:
+ 加法,也用在字符串的连接中
- 减法
* 乘法
^ 指数运算
% 求模 (只适用于整数)
# 矩阵相乘
>,< 大于、小于
逻辑运算符:
.lt.
小于
.le.
小于等于
.gt.
大于
.ne.
不等于
.eq.
等于
.and.
和、并且
.or.
或
.xor.
exclusive or除……或
.not.
非
变量:
ncl中的变量名必须以字母开头,但是后面可以是数值字母混合,下划线_也可以用在变量名中。每个变量都有其附属的信息(也称作meta data),这些附属的信息可以通过ncl的命令来获得、建立、修改、删除。
eg :
> ncl
;进入到ncl
> f=addfile("ho.contr.TEMP.mon.nc","r")
;以只读的方式打开文件ho.contr.TEMP.mon.nc ,这时f就是文件的属性信息了
> print(f)
;查看f的值,print是ncl中显示变量值的命令,下面就是一个输出的例子,文件头没有给出
dimensions:
time = 360
// unlimited
lev = 32
lat = 128
lon = 128
variables:
float TEMP ( time, lev, lat, lon )
long_name :
Temperature
units :
C
missing_value :
9e+20
float lat ( lat )
long_name :
latitude
units :
degrees_north
float lev ( lev )
long_name :
ocean depth
units :
meters
float lon ( lon )
long_name :
longitude
units :
degrees_east
float time ( time )
long_name :
time
units :
days since 0000-01-01 00:00:00
从输出的信息我们就能看到这个文件有5个变量、其中有四个是坐标变量、一个是温度变量,温度是四维的变量,还可以看见每个变量的维数,各个维的长度,维的名称、单位等等。
读取变量TEMP的值:
temp=f->TEMP
;把文件f中的变量TEMP赋给temp,一定要注意文件中变量名的大小写,当然temp你可以随便命名。
这是最好不要print(temp),因为我们可以看到temp是个(360*32*128*128)得数组,如果你想刷屏那可以这么做。
这是想看变量的信息可以通过命令printVarSummary(temp)来看
> printVarSummary(temp)
Variable: temp
Type: float
Total Size: 754974720 bytes
188743680 values
Number of Dimensions: 4
Dimensions and sizes:
[time | 360] x [lev | 32] x [lat | 128] x [lon | 128]
Coordinates:
time: [281910..292680]
lev: [-5500..-20]
lat: [-89.29688..89.29688]
lon: [1.40625..358.5938]
Number Of Attributes: 3
long_name :
Temperature
units :
C
missing_value :
9e+20
还可以抽出变量中的一部分数据来读: ncl中变量的维数是从0开始的(要切记)
temp=f->TEMP
;这就是把TEMP的所有值都读出来
temp2=f->TEMP(0,31,:,:) ;这就是取第一时刻,第32层的所有温度值
temp3=f->TEMP(0,31,::5,:) ;取第一时刻,第32层,每隔5个纬度,所有经度取值
temp2,temp3现在就是一个平面的数据了,这就是所谓的维数退化(dimension reduction),这时可以print(temp2)
通过这种addfile,f->TEMP的赋值方式,TEMP中的所有meta data也同时被赋过去。
变量维数及属性表示方法:
@ 表示变量的属性,例如我要看temp的单位属性
ncl 8> print(temp@units)
(0)
C
就告诉你单位是度,常用的变量属性有units,_FillValue,missing_value,long_name
!表示变量的维的名称,例如变量temp第一维的名称
ncl 7> print(temp!0)
(0)
time
第一维的名称是time
& 表示变两维的数值,例如变量temp第二维的数值
ncl 9> print(temp&lev)
Variable: lev (coordinate)
Type: float
Total Size: 128 bytes
32 values
Number of Dimensions: 1
Dimensions and sizes:
[lev | 32]
Coordinates:
Number Of Attributes: 2
long_name :
ocean depth
units :
meters
(0)
-5500
(1)
-5000
(2)
-4500
(3)
-4000
(4)
-3500
(5)
-3000
(6)
-2500
(7)
-2000
(8)
-1800
(9)
-1600
(10)
-1400
(11)
-1200
(12)
-1000
(13)
-900
(14)
-800
(15)
-700
(16)
-600
(17)
-500
(18)
-450
(19)
-400
(20)
-350
(21)
-300
(22)
-250
(23)
-200
(24)
-175
(25)
-150
(26)
-125
(27)
-100
(28)
-80
(29)
-60
(30)
-40
(31)
-20
一般要察看一个为数不大的维的信息,我们就可以print(var&dimname),这样维的信息基本上就都显示出来了
进入ncl的两种方法:
1.直接在shell命令行输入ncl,就能进入ncl,然后一条一条执行命令,这种是交互式的执行方式。
2.编好一个ncl脚本,在shell命令行输入ncl filename.ncl就可以了,这种是批处理的执行方式。
一些特殊的行:注释行;
数据类型:
非数值型:字符串(string)、字符(character)、图形(graphic)、文件(file)、逻辑型(logical)、列表(list)
运算符:
逻辑运算符:
变量:
eg :
> ncl
> f=addfile("ho.contr.TEMP.mon.nc","r")
> print(f)
读取变量TEMP的值:
Variable: temp
Type: float
Total Size: 754974720 bytes
Number of Dimensions: 4
Dimensions and sizes:
Coordinates:
Number Of Attributes: 3
变量维数及属性表示方法:
@ 表示变量的属性,例如我要看temp的单位属性
就告诉你单位是度,常用的变量属性有units,_FillValue,missing_value,long_name
!表示变量的维的名称,例如变量temp第一维的名称
& 表示变两维的数值,例如变量temp第二维的数值
ncl 9> print(temp&lev)
Variable: lev (coordinate)
Type: float
Total Size: 128 bytes
Number of Dimensions: 1
Dimensions and sizes:
Coordinates:
Number Of Attributes: 2
(0)
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)
(14)
(15)
(16)
(17)
(18)
(19)
(20)
(21)
(22)
(23)
(24)
(25)
(26)
(27)
(28)
(29)
(30)
(31)
一般要察看一个为数不大的维的信息,我们就可以print(var&dimname),这样维的信息基本上就都显示出来了
用NCL输出nc文件
[这个贴子最后由first在 2007/04/15 08:01pm 编辑]
用ncl输出nc文件很简单,主要是建立空白文件、计算变量、给变量附加属性、输出到文件中。
1.要建立一个空白的文件:
out=addfile("dataname.nc","c")
;这里的c就是create的意思,在创建文件是要保证文件不存在,否则系统会提示错误,所以一般会在这句话前加上 system("rm -f dataname.nc")
2.要准备好要输出的变量,例如我要输出变量u(time,lev,lat,lon)
3.给变量附属性:
u!0="time"
u&time=ispan(1,360,1)
; 这里是创建一个时间序列1,2,3……360
u!1="lev"
u&lev=f->var&lev
;输出变量u的高度层和文件中var的高度层是一样的
u!2="lat"
u&lat=lat
u!3="lon"
;这里的lat必须是已经知道的一个数组
u&lon=lon
u@long_name="zonal wind component"
u@units="m/s"
4.输出变量
out->U=u
这样就完成文件的创建了。通过读如旧文件,输出新文件可以修改变量的属性(时间轴、单位等)。
用ncl输出nc文件很简单,主要是建立空白文件、计算变量、给变量附加属性、输出到文件中。
1.要建立一个空白的文件:
out=addfile("dataname.nc","c")
2.要准备好要输出的变量,例如我要输出变量u(time,lev,lat,lon)
3.给变量附属性:
4.输出变量
这样就完成文件的创建了。通过读如旧文件,输出新文件可以修改变量的属性(时间轴、单位等)。