- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
返回的数组:不需提前分配 – grido = f2fsh ( gridi, (/ 64,128/)) – gridi(10,30,73,144) grido(10,30,64,128)
grido = f2fsh_Wrap ( gridi, (/ 64,128/)) ; contributed.ncl
fspan( start, finish, npts )
返回值则为1D 等间距的浮 点型或双精度型数组
•
npts 是指包括start 和finish所有点的个数
b = fspan(-89.125, 9.3, 100)
print(b)
Variable b: Type: float Number of Dimensions: 1 Dimensions and sizes:(100) (0) -89.125 (1) -88.13081 (2) -87.13662 (…) …. (97) 7.311615 (98) 8.305809 (99) 9.3
mask
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl”
in = addfile(“atmos.nc","r") ts = in->TS(0,:,:) oro = in->ORO(0,:,:) ; mask ocean ; [ocean=0, land=1, sea_ice=2] ts = mask(ts,oro,1)
–
•
new 和 (/…/) 可在脚本中任何地方使用
–
new 并不常用
自动生成数组
•赋值(支持的数据格式)
u = f->U – 数据子集也可 : u = f->U(:, 3:9:2, :, 10:20)
•
变量之间的赋值
y=x y 与x有同样的大小,类型和meta data – 不需提前分配y数组
•
函数
代数运算符
代数运算符 + 加 *乘 ^ 幂 > 大于 - 减 / 除 # 数组乘 < 小于
用 (…) 调整计算顺序 + 是一种特殊的算符 - 代数算符: 5.3 + 7.95 13.25 - 连接字符串: “pine” + “apple” “pineapple” - 代数算符以及连接字符串
–
•
பைடு நூலகம்函数可能需要 行列调整
–
*必须* 使用 named dimensions 来调整
; 计算变量的zonal和time平均 ; T(time,lev,lat,lon) T(0,1,2,3) ; 无 meta data 传输 Tzon = dim_avg_n( T, 3) Tavg = dim_avg_n( T, 0)
"alpha” + ”_" + (5.3 + 7)
"alpha_12.3”
逻辑表达式
.le. (小于等于) .lt. (小于) .ge. (大于等于) .gt. (大于) .ne. (不等于) .eq. (等于) .and. (且) .xor. (异或) .or. (或) .not. (非)
手动生成数组
•
用 (/…/)
a_integer = (/1,2,3/) – a_float = (/1.0, 2.0, 3.0/) , a_double = (/1, 2.0, 3.2d /) – a_string = (/"abc",”12345",”hello, world"/) – a_logical = (/True, False, True/) – a_2darray = (/ (/1,2,3/), (/4,5,6/), (/7,8,9/) /)
–
TJAN(0,:,:)
= T(0,:,:)
•
数组降维是一个“特色” [真的 ]
数组的算符
• • •
类似于f90/f95, Matlab, IDL 数组必须同样大小: conform 令 A 和 B 为 (10,30,64,128)
–
<= conform
–
– –
C = A+B D = A-B E = A*B C, D, E 自动生成 theta = T*(1000/P)^0.286 theta(10,30,64,128)
conform, conform_dims
数组的操作要求数组间conform 函数conform( x, r, ndim ) • 函数 conform_dims( dims, r, ndim ) • 扩展数组(r) 使其与(x) 数组维数一样(dims) • ndim: 标量或数组用以表明x的哪一维或哪些维和r的维数一致 • 数组r 的数值将被‘传播’ (复制)至 x大小的数组里
函数where(conditional_expression \ • , true_value(s) • , false_value(s) ) • 类似于f90的 “where”
•
•
\
通过数组的条件(True或则False)对各个数进行操作
; q 数组; q<0 => q=q+256 ; f90: where(q.lt.0) q=q+256 q = where (q.lt.0, q+256, q) x = where (T.ge.0 .and. ismissing(Z) , a+25 , 1.8*b) salinity = where (sst.lt.5 .and. ice.gt.icemax \ , salinity*0.9, salinity)
•
用built-in 函数
– –
•
所有数组在运算中遇缺省值即被忽略
内置函数和程序
尽量用 • 掌握常用的函数
•
all, any, conform, ind, ind_resolve, dimsizes – fspan, ispan, ndtooned, onedtond, – mask, ismissing, where – system, systemfunc
•
NCL 有一个 1 度的陆地-海洋mask – load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl” – flags for ocean, land, lake, small island, ice shelf
where
•
根据条件数组对数组进行赋值
不可: y = where(y.eq.0, y@_FillValue, 1./y) 可: y = 1.0/where(y.eq.0, y@_FillValue, y)
dim_*_n [dim_*]
•
对数组的行列dimension执行操作
•
avg, var, sum, pqsort, median, rmsd, ….. • dim_*_n 函数是新的(v5.1.1以上有) • 对指定的行列进行操作 • 内存使用较少 • dim_* 函数 • 仅对最右边的行列操作 • 可能需要行列调整 比如: x(time,lat,lon) => x(0,1,2) • 函数dim_avg_n( x, n ) • xZon = dim_avg_n( x, 2 ) => xZon(ntim,nlat) • xTim = dim_avg_n( x, 0 ) => xTim(nlat,mlon) • 函数dim_avg ( x ) • xZon = dim_avg( x ) => xZon(ntim,nlat) • xTim = dim_avg( x(lat|:,lon|:,time|:) ) => xTim(nlat,mlon)
•
x(ntim,klev,nlat,mlon), w(nlat) ; x( 0 , 1 , 2 , 3 ) wx = conform (x, w, 2) ; wx(ntim,klev,nlat,mlon) q = x*wx ; q = x* conform (x, w, 2) wx = conform_dims ( (/ntim,klev,nlat,mlon/) , w, 2) wx = conform_dims ( dimsizes(x), w, 2)
Type: integer Total Size: 16 bytes 4 values Number of dimensions: 1 Dimensions and sizes:(4) (0) 12 (1) 25 (2) 116 (3) 100 (0) rank=4
rank = dimsizes(dimt) print ("rank="+rank)
通常和数组函数一起用 • if (all( ismissing(x) )) then … [else …] end if • nFill = num( ismissing(x) ) • nVal = num( .not. ismissing(x) )
if (any( ismissing(xOrig) )) then …. else …. end if
; Tzon(ntim,klev,nlat) ; Tavg(klev,nlat,mlon)
dimsizes(x)
•
•
返回数组变量的维数 如果是多维数组,则返回值为1D 整型数组
Variable: dimt
fin
= addfile(“in.nc”,”r”)
t = fin->T dimt = dimsizes(t) print(dimt)