- 积分
- 55965
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-21
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
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 。
- fn = 'D:/Temp/nc/83.nc'f = addfile(fn)
- ts = f['TS'][0,:,:]
- #calculate deviation from zonal mean
- zm1 = mean(ts, axis=1)
- zm = zm1.reshape(len(zm1), 1)
- #zm = broadcast_to(zm, (ts.shape[0], ts.shape[1]))
- nts = ts - zm
- #Plot
- #Plot origin data
- lworld = shaperead('D:/temp/map/country1.shp')
- axesm(position=[0.05, 0.55, 0.8, 0.4])
- geoshow(lworld, edgecolor='b')
- levs = arange(240, 301, 5)
- layer = contourm(ts, levs, color='k')
- ylim(-90, 90)
- clabel(layer)
- title('Origin data')
- #Plot zonal mean
- axes(position=[0.8, 0.55, 0.15, 0.4])
- plot(zm1, ts.dimvalue(0))
- yaxis(tickvisible=False)
- xlim(200, 320)
- ylim(-90, 90)
- #Plot deviation data
- axesm(position=[0.05, 0.05, 0.8, 0.4])
- geoshow(lworld.clone(), edecolor='k')
- levs = arange(-35, 36, 5)
- layer = contourfm(nts, levs, edgecolor='gray')
- ylim(-90, 90)
- colorbar(layer)
- title('Deviation from zonal average')
|
|