maskout()的作用: 逐步剔除不需要的点
tmave()的作用: 使用mask序列, 只求所需时间点的平均
关键点: 将script的脚本数组变成GrADS的变量
范例: 50年的资料序列, 经过初步的分析, 已经分成三组, 分别以1,2,3标识, 并保存在数据文件group.txt中:
[1,] 2
[2,] 2
[3,] 3
......
[18,] 2
[19,] 1
[20,] 1
[21,] 3
[22,] 3
......
[49,] 2
[50,] 3
第一步: 上述分组标识用rc=read()读入后保存在数组_group.i中.
第二步: 根据_group.i序列制作mask序列:
'set t 1 50'
* 为每组定义一个初始的mask序列:
i=1
while(i<=ng)
'mark'i'=1'
i=i+1
endwhile
* 根据_group.i的分组识, 标记每个时次上每组的mask序列:
t=1
while(t<=50)
'mark0=-1' * mark0是用来用它来标识当前时刻的
tleft=t-1 * 当前t时刻之前的所有点
tright=50-t * 当前t时刻之后的所有点
'left=const(mark0(t-'tleft'),1,-u)' * 将t时刻之前的所有点设为1
'right=const(mark0(t+'tright'),1,-u)' * 将t时刻之后的所有点设为1
'mark0=left+right' * 相加之后所得mark0序列除了当前时刻外<0, 其它时刻均为0
* 保留当前时刻所隶属组的mask序列的值, 剔除其它组的mask序列值
i=1
while(i<=ng)
if(_group.t!=i) * 找出当非前时刻所隶属的组
'mark'i'=maskout(mark'i',mark0)' * 将该组mask序列的值标为缺测
endif
i=i+1
endwhile
t=t+1
endwhile
至此, mask序列制作完成.
第三步: tmave()作合成:
'set t 1'
i=1
while(i<=ng)
'ts'i'=tmave(mark'i'(z=1),ts,t=1,t=50)'
i=i+1
endwhile
第四步: 画图.
应用:
1. 合成分析
2. 多年的逐日/逐月/逐候等数据, 可以用此原理求得每年1月,2月等的序列, 加上 set missconn on, 可以绘制曲线.
3. 根据变量A(mask序列)的特点(如ENSO指数)求变量B的合成.
出处:http://bbs.lasg.ac.cn/bbs/viewthread.php?tid=35975&extra=page%3D3%26amp%3Bfilter%3Ddigest
maskout()和tmave()做合成分析
最新推荐文章于 2023-06-11 13:43:19 发布