NCL简单的语法

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输出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
这样就完成文件的创建了。通过读如旧文件,输出新文件可以修改变量的属性(时间轴、单位等)。
  • 14
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要学习NCL(NCAR Command Language)的基本语法,您可以按照以下步骤进行: 1. 官方文档和教程:NCL官方网站提供了详细的官方文档和教程,涵盖了NCL的各个方面,包括基本语法、函数、数据处理、图形绘制等。您可以从官方网站上下载和阅读这些文档,以了解NCL的基本语法和用法。 2. 学习示例代码:官方文档中通常包含了许多示例代码,这些代码可以帮助您理解和学习NCL的基本语法。尝试运行这些示例代码,并观察代码的输出结果,以加深对语法的理解。 3. 在线教程和视频课程:有一些在线教程和视频课程可以帮助您学习NCL的基本语法。您可以搜索这些资源,并根据自己的学习喜好选择适合的教程进行学习。 4. 练习和实践:学习任何编程语言都需要实践。尝试编写一些简单NCL脚本,并运行它们以验证结果。从简单的变量赋值、条件语句和循环开始,逐渐扩展到更复杂的数据处理和图形绘制操作。 5. 参考资料和社区交流:除了官方文档和教程外,还可以参考一些NCL的参考资料和书籍,这些资料通常包含更深入的语法和应用方面的内容。此外,加入NCL的用户社区,参与讨论和交流,与其他NCL用户分享经验和技巧。 6. 实际项目和挑战:尝试在实际项目中应用NCL,例如处理和分析气象数据、绘制自定义图形等。通过实践中遇到的挑战,您将更好地理解NCL语法和功能。 记住,学习编程语言需要时间和耐心。始终保持实践和探索的态度,并积极利用各种资源和机会来学习和提升自己。祝您在学习NCL的过程中取得成功!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值