从多个netcdf文件中混合图层高度的numpy.mean

时间:2017-10-07 00:50:09

标签: python

我知道如何在一个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))

1 个答案:

答案 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)