爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4317|回复: 1

MeteoInfoLab脚本示例:纬向平均的偏差

[复制链接]

新浪微博达人勋

发表于 2017-6-15 15:18:17 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 MeteoInfo 于 2017-6-20 15:44 编辑

这个例子演示如何计算水平格点数据的纬向平均偏差,参考了NCL网站上的例子:http://www.ncl.ucar.edu/Applications/dev.shtml 。mean函数可以做不同维的平均。程序中ts是水平二维数组(经纬度格点场,64*128),zm = mean(ts, axis=1) 获得纬向平均一维数组(64),ts和zm的维数不同,直接相减必须符合数组的broadcasting规则,也就是从后往前,两个数组的维相同或者其中一个为1。显然目前是不符合的,可以对zm reshape,获得二维数组(64*1),这样ts和zm数组就符合broadcasting规则了,可以直接相减。也可以用broadcast_to函数将zm扩展为和ts一样的shape,然后再相减。

关于数组broadcasting的内容可以参考这里:https://docs.scipy.org/doc/numpy/user/basics.broadcasting.html

  1. fn = 'D:/Temp/nc/83.nc'f = addfile(fn)
  2. ts = f['TS'][0,:,:]

  3. #calculate deviation from zonal mean
  4. zm1 = mean(ts, axis=1)
  5. zm = zm1.reshape(len(zm1), 1)
  6. #zm = broadcast_to(zm, (ts.shape[0], ts.shape[1]))
  7. nts = ts - zm

  8. #Plot
  9. #Plot origin data
  10. lworld = shaperead('D:/temp/map/country1.shp')
  11. axesm(position=[0.05, 0.55, 0.8, 0.4])
  12. geoshow(lworld, edgecolor='b')
  13. levs = arange(240, 301, 5)
  14. layer = contourm(ts, levs, color='k')
  15. ylim(-90, 90)
  16. clabel(layer)
  17. title('Origin data')

  18. #Plot zonal mean
  19. axes(position=[0.8, 0.55, 0.15, 0.4])
  20. plot(zm1, ts.dimvalue(0))
  21. yaxis(tickvisible=False)
  22. xlim(200, 320)
  23. ylim(-90, 90)

  24. #Plot deviation data
  25. axesm(position=[0.05, 0.05, 0.8, 0.4])
  26. geoshow(lworld.clone(), edecolor='k')
  27. levs = arange(-35, 36, 5)
  28. layer = contourfm(nts, levs, edgecolor='gray')
  29. ylim(-90, 90)
  30. colorbar(layer)
  31. title('Deviation from zonal average')


anomalies.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-6-15 20:59:15 | 显示全部楼层
来给大神点赞~~~~膜拜膜拜~~~~~
{:eb502:}{:eb502:}
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表