我知道如何在一个netcdf文件中计算变量的平均值。但是,我有40个netcdf文件。在每个文件中,我有4000个数据值用于混合图层高度。我想为多个netcdf文件创建一个平均混合层高度列表。 最后,我的清单大小应为40.
有人可以帮我用python代码来创建这个列表吗? 非常感谢你。
以下是我用来计算单个netcdf文件中一个图层的平均混合图层高度的代码
import numpy as np
import netCDF4
f = netCDF4.Dataset('niv.nc')
#the shape of my data set is (5760,3)
#5760 is the number of lists of time
#In each list I have 3 mixing layer heights for 3 layers.
#I'm going to call all the mixing layer height data for the first layer
a= (f.variables['pbl'][:,0])
print (np.mean(a))
答案 0 :(得分:1)
你必须以某种方式得到文件名列表。在这里,我假设您将所有文件放在一个文件夹中,并且该文件夹中没有其他netCDF文件。要使用netCDF4并且每个文件需要单独的平均值
import numpy as np
import netCDF4
from glob import glob
# you want to modify this to use your actual data directory
filename_list = glob('/home/user/data_dir/*.nc')
mean_list = []
for filename in filename_list: # make filename_list with something like os.listdir
with netCDF4.Dataset(filename) as ds:
mean_list.append(np.mean(ds.variables['pbl'][:, 0]))
使用xarray
执行相同的操作:
import xarray as xr
from glob import glob
# you want to modify this to use your actual data directory
filename_list = glob('/home/user/data_dir/*.nc')
mean_list = []
for filename in filename_list: # make filename_list with something like os.listdir
with xr.open_dataset(filename) as ds:
mean_list.append(np.mean(ds['pbl'][:, 0].values))
如果不是获取每个文件的平均值,请假设第一个维度为time
,并且您希望获得所有文件的平均值。要使用xarray
执行此操作,您可以使用open_mfdataset
,如下所示:
import xarray as xr
import os
from glob import glob
# you want to modify this to use your actual data directory
filename_list = glob('/home/user/data_dir/*.nc')
ds = xr.open_mfdataset(filename_list, concat_dim='time')
mean = np.mean(ds['pbl'][:, 0].values)