maskout()和tmave()做合成分析

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
  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值