将nc文件中的数据按月份求平均值(就是比如我们有2001~2010这10年按月存储的数据,我们分别求这10年数据1月份、2月份、…、12月份的平均值)

关于nc数据的读取之前介绍过,所以这里就跳过,假设我们已经读取好了一个径流的数据ro。
示例中用的产品为EAR5,数据范围选取的是1984~2010这27年的数据。

#分月份计算ro平均值
ro_all=[[] for i in range(12)]
ro_monthdiv=[]

#首先我们先将27年,每个月份的数据分别存储。即这12个子数组中,分别存储了27年1月份的数据、27年2月份的数据、...、27年12月份的数据
for i in range(12):
    for j in range(27):
        ro_all[i].append(ro[j*12+i])
    ro_all[i]=np.array(ro_all[i])

#然后分别求平均就好了
for i in range(12):
    ro_monthdiv.append(np.mean(ro_all[i],axis=0))
ro_monthdiv=np.array(ro_monthdiv)
#print(ro_monthdiv.shape)

这一步的目的是为了便于后续的计算
补充一个额外的,我们可以将计算结果可视化,便于研究。
这里需要用到matplotlib库。

import matplotlib.pyplot as plt

#创建一块儿画布,两个参数分别是长和宽,figure函数的具体用法大家可以自行查阅,这里只需要这两个就够了
plt.figure(figsize=(15,12))

#这里是指定你要画的多个图的分布
#注意,subplot函数中,第三个参数表示顺序,从1开始,分别从左至右、从上至下编号
for i in range(12):
    plt.subplot(4,3,i+1)
    plt.title("Q_Month"+str(i+1))
    
#这一步是绘图,lon、lat是之前读取nc文件时读取到的经度和纬度,用来绘图时的定位
#ro_monthdiv[i]即为我们要绘制的图像
#shading有几个值,大家可以自己查询,并根据实际情况设置
#vmin与vmax为显示值的范围(最小值与最大值,大于最大值的值都视作最大值,最小值也类似)
#cmap是用来设定色带,也是有几个特定值,大家可以自行查询
#colorbar是显示图例
    plt.pcolormesh(lon,lat,ro_monthdiv[i],shading="auto",vmin=0,vmax=200,cmap='OrRd')
    colorbar=plt.colorbar()
plt.tight_layout()

最后看一下效果图:
蒸散发示意图
向大家表示歉意,我写的太啰嗦了。主要是,我在写这个程序之前,和老师交流的时候就对“按月份求平均”的这个说法产生了误解,我以为是直接对所有月份求出来一个平均结果,而实际上应该是分月份来求平均。所以我在描述的时候用了很多繁琐的举例形容。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐