如何从NETcdf时间维度(0对应于一月)存储月份?

2024-09-30 02:32:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个三维NETcdf数据集,并试图与降水量变量。我想绘制60年来它的月平均值,但是我很难生成一个与以前的平均值计算一致的图,我没有涉及循环。下面是我如何存储一月、二月的值并取平均值:

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-11是1月到12月,所以我同样存储其他月份的值。我相信我存储数据的方式有问题,因为在我减去控件(mjan和mfeb,使用此方法存储)并再次取平均值后,会产生奇怪的结果。谢谢你的阅读和帮助。你知道吗


Tags: 数据infornprangemeanlikeempty
1条回答
网友
1楼 · 发布于 2024-09-30 02:32:54

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)

相关问题 更多 >

    热门问题