多维数组netcdf图的python平均值
Posted
技术标签:
【中文标题】多维数组netcdf图的python平均值【英文标题】:python average of multidimensional array netcdf plot 【发布时间】:2021-04-18 16:35:28 【问题描述】:我从 netCDF 文件中读取了一个多维数组。 我需要绘制的变量名为“em”,它有 4 个维度“em(年、组、纬度、经度)”
“组”变量有 2 个值,我只对第一个感兴趣。 所以我需要管理的唯一变量是“年”变量。变量“年”有 17 个值。对于第一个情节,我需要平均前 5 年,对于第二个情节,我必须平均从第 6 年到最后几年。
data = Dataset (r'D:\\Users\\file.nc')
lat = data.variables['lat'][:]
lon = data.variables['lon'][:]
year = data.variables['label'][:]
group = data.variables['group'][:]
em= data.variables['em'][:]
如何为这个数组创建一个二维数组? 第一个:
`em= data.variables['em'][0:4][0][:][:]`
第二个:
em= data.variables['em'][5:16][0][:][:]
我创建了一个简单的循环
nyear=(2005-2000)+1
for i in range (nyear):
em_1= data.variables['em'][i][0][:][:]
em_1+=em_1
em_2000_2005=em_1/nyear
但我认为在 python 上可以有更优雅的简单方法
【问题讨论】:
【参考方案1】:我强烈建议使用xarray 处理 NetCDF 文件。您可以按名称对其进行操作,而不是按位置跟踪索引,这大大提高了代码的可读性。在您的示例中,您需要做的就是
import xarray as xr
ds = xr.open_dataset(r'D:\\Users\\file.nc')
em_mean1 = ds.em.isel(label = range(6,18)).mean()
em_mean2 = ds.em.isel(label = range(6)).mean()
.isel 方法选择指定维度(在本例中为标签)的索引,.mean() 方法计算选择的平均值。
【讨论】:
【参考方案2】:你可以使用 NumPy:
em = data.variables['em'][:];
em_mean = np.mean(em,axis=0) # if you want to average all over first dimension
如果数据包含 NaN,只需使用 NumPY 的 nanmean。
由于您想平均前 3 个值,对于第一种情况,请使用:
em_mean1 = np.squeeze(np.mean(em[0:4,:],axis=0))
并采取情节:
em_mean1 = np.squeeze(em_mean1[0,:]);
你可以对第二种情况做类似的事情。
【讨论】:
以上是关于多维数组netcdf图的python平均值的主要内容,如果未能解决你的问题,请参考以下文章
机器学习基于组平均的AGNES算法,支持多维数组,距离用欧式距离