如何存储来自NETcdf时间维度的月份(0对应于1月)?

时间:2018-07-23 07:30:35

标签: python netcdf netcdf4

我有一个3d NETcdf数据集,正在尝试使用降水量变量。我想绘制60年的月平均值,但是很难绘制出与以前没有涉及for循环的平均计算结果一致的图。这是我存储1月,2月的值并取均值的方法:

janNES = np.empty_like(conprecip[0:720,6:-11,95:141])

for i in range(0,720,12):
     janNES[i]=(NESprecip[i,6:-11,95:141])          

mjanNES=(np.mean(janNES, axis=0))

febNES = np.empty_like(conprecip[0:720,6:-11,95:141])

for i in range(1,720,12):
     febNES[i]=(NESprecip[i,6:-11,95:141]) 

mfebNES=(np.mean(febNES, axis=0))

#values that are plotted, monthly 60 year averages
np.mean(mjanNES-mjan)
np.mean(mfebNES-mfeb)

从0到1月为1到12,因此我以类似方式存储其他月份的值。我认为在减去控件(mjan和mfeb,使用此方法存储)并再次取均值后,我存储数据的方式出了问题,这会产生奇怪的结果。感谢您的阅读和帮助。

1 个答案:

答案 0 :(得分:1)

janNES数组的第一维的大小为720,但是当您使用以下方法循环播放时:

for i in range(0,720,12):
    janNES[i]=...

您仅填充第12(0,12,24,...)个项目,但最后取整个数组的均值。您可能希望将数组创建为:

janNES = np.empty_like(conprecip[0:720:12,6:-11,95:141])

然后用例如:

for ii,i in enumerate(range(0,720,12)):
    janNES[ii]=(NESprecip[i,6:-11,95:141])

ii现在从0,1,2,..,59运行,而i0,12,24,..,708运行。


顺便说一句,您不需要for循环,Numpy可以通过切片原始数组直接选择数据:

janNES = NESprecip[0:720:12, 6:-11, 95:141]
febNES = NESprecip[1:720:12, 6:-11, 95:141]

您甚至可以直接从中计算平均值:

mjanNES = NESprecip[0:720:12, 6:-11, 95:141].mean(axis=0)