Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python网格数据集计算30年气候正常值_Python_Numpy_Netcdf_Weather_Noaa - Fatal编程技术网

从Python网格数据集计算30年气候正常值

从Python网格数据集计算30年气候正常值,python,numpy,netcdf,weather,noaa,Python,Numpy,Netcdf,Weather,Noaa,我试图为下面链接的NARR每日网格数据集计算30年正常温度(1981-2010年平均值) 最后,对于每个网格点,我需要一个包含365个值的数组,每个值都包含根据当天30年的数据计算出的当天平均温度。例如,每个网格点数组中的第一个值是根据该网格点30年(1981-2010)的1月1日温度数据计算出的1月1日平均温度。我的最终目标是能够使用这个新的30yrNormal阵列来计算每天的温度异常 到目前为止,我只能根据一年的数据计算异常情况。这方面的问题是,它采用的是日温度与全年平均温度之间的差值,而不

我试图为下面链接的NARR每日网格数据集计算30年正常温度(1981-2010年平均值)

最后,对于每个网格点,我需要一个包含365个值的数组,每个值都包含根据当天30年的数据计算出的当天平均温度。例如,每个网格点数组中的第一个值是根据该网格点30年(1981-2010)的1月1日温度数据计算出的1月1日平均温度。我的最终目标是能够使用这个新的30yrNormal阵列来计算每天的温度异常

到目前为止,我只能根据一年的数据计算异常情况。这方面的问题是,它采用的是日温度与全年平均温度之间的差值,而不是日温度与该日温度的30年平均值之间的差值:

file='air.sfc.2018.nc'
ncin = Dataset(file,'r')
#put data into numpy arrays
lons=ncin.variables['lon'][:]
lats=ncin.variables['lat'][:]
lats1=ncin.variables['lat'][:,0]
temp=ncin.variables['air'][:]
ncin.close()

AvgT=np.mean(temp[:,:,:],axis=0)
#compute anomalies by removing time-mean
T_anom=temp-AvgT
数据:
在1981-2010年间,这是最容易用CDO解决的问题

如果您在Linux上使用Python,那么可以使用我的包nctoolkit(&)。这使用CDO作为后端

假设这30个文件是一个名为ff_list的列表。下面的代码应该可以工作

首先,您将创建30年每日平均气候学

import nctoolkit as nc
nc.options(lazy = True)
mean_30 = nc.open_data(ff_list)
mean_30.merge_time()
mean_30.cdo_command("del29feb")
mean_30.daily_mean_climatology()
mean_30.release()
然后你可以从每天的数据中减去这个,得到异常值

anom_30 = nc.open_data(ff_list)
anom_30.cdo_command("del29feb")
anom_30.sub(mean_30)
anom_30.release()
这应该有异常


一个问题是这些文件是否有闰年,或者如果存在闰年,您希望如何处理它们。CDO有一个未记录的命令-delfeb29,我在上面使用过它

尝试读取dict中的多个一年文件,年份作为键,相应的
数据集
作为值。然后试着看看你是否能算出平均值。如果您仍然需要帮助,您需要更多地了解
数据集的结构,例如,如何在给定的纬度/经度坐标下查找给定一天的温度。分析气候数据的最佳方法是使用特殊运算符,如CDO、NCO、NCL等。我鼓励您在继续使用python之前先研究它们,但是您可以尝试探索
Xarray
中的
resample
函数。另外,尝试CDO中的
ydaymean
函数,看看它是否回答了您的问题。它基本上计算了多年的日平均值。谢谢你的帮助!我在安装nctoolkit时遇到问题。当我尝试安装conda nctoolkit时,会收到以下错误消息:PackagesNotFoundError:以下软件包无法从当前通道获得:-nctoolkit当前通道:--是否有其他方法尝试安装该软件包?conda安装如下:
conda安装-c rwinctoolkit