创建年度最大降雨量地图的程序的数组维度问题

时间:2017-09-20 17:52:46

标签: python arrays matplotlib jupyter-notebook dimension

我正在尝试为特定年份创建年度最大降雨量的地图。

我有十个NC文件,每个文件降雨量为3小时,包含5年的数据。对于我使用的降雨数据,它位于3D数组中:pr(time,lat,lon),尺寸为(14616, 145, 192)

我需要使用Matplotlib找到每年的最大降雨量,创建此数据的世界地图。考虑到每个NetCDF文件有5年,我不确定这样做的最佳方法,这意味着我需要在每个文件的14616个数据点中找到5个最大值,总共10个文件。

我的第一个想法是按年份的文件部分(从现在开始只有一个文件):

a = pr[0:2928]
b = pr[2929:5849]
c = pr[5850:8769]
d = pr[8770:11689]
e = pr[11690:14617]

然后使用np.max计算每个值的最大值,并使用np.arry创建包含这些值的新数组。问题是这导致一维数组,我遇到了问题,因为我的输入必须是一个二维数组。 (否则会导致错误:TypeError: Input z must be a 2D array.

我尝试使用np.reshape重新整形数组(重新整形为(2L, 5L))并且我能够成功完成,但在尝试创建数字时会出现以下错误: TypeError: Length of x must be number of columns in z.

我相信这是因为我创建的新数组中没有包含lat和lon数据,但我对此并不完全确定。

我想知道是否有更好的方法来找到最大值然后将它分开,就像我考虑它的大量数据一样,并且我不确定更有效的方法。

如果没有,我想知道如何格式化我的新数组,以便它可以用来创建地图。下面我还有代码来创建导致TypeError: Length of x must be number of columns in z.

的数字

yrmax1是形状为(2L, 5L)的最大降雨量的新重组数组。

plt.figure(1,figsize=(10, 8))

map = Basemap(projection='cyl',\
            llcrnrlat=LLlat,urcrnrlat=URlat,\
            llcrnrlon=LLlon,urcrnrlon=URlon,\
            rsphere=6371200.,resolution='i')
map.drawcoastlines(linewidth=0.5) 
lons,lats = map(lon,lat)
cs = plt.contourf(lons,lats,yrmax1,np.linspace(-2,1,30),cmap=plt.cm.RdYlBu_r, extend='both')  
plt.colorbar(cs,orientation='horizontal')
plt.xlabel('Longitude')
plt.ylabel('Latitude')

plt.show()

谢谢!

0 个答案:

没有答案