||
这个例子演示如何计算水平格点数据的纬向平均偏差,参考了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
zm = mean(ts, axis=1)
zm = zm.reshape(len(zm), 1)
#zm = broadcast_to(zm, (ts.shape[0], ts.shape[1]))
nts = ts - zm
#Plot
lworld = shaperead('D:/temp/map/country1.shp')
subplot(2,1,1)
axesm(newaxes=False)
geoshow(lworld, edgecolor='b')
levs = arange(240, 301, 5)
layer = contourm(ts, levs, color='k')
clabel(layer)
title('Origin data')
subplot(2,1,2)
axesm(newaxes=False)
geoshow(lworld.clone(), edecolor='k')
levs = arange(-35, 36, 5)
layer = contourfm(nts, levs, edgecolor='gray')
colorbar(layer)
title('Deviation from zonal average')
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-22 09:19
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社