很好的开始,我会推荐以下内容来帮助解决您的问题。
首先,检查一下ncrcat http://nco.sourceforge.net/nco.html#ncrcat-netCDF-Record-Concatenator快速将各个 netCDF 文件连接成一个文件。我强烈建议下载 NCO 来进行 netCDF 操作,特别是在这种情况下,它将简化您以后的 Python 编码。
假设这些文件的名称是precip_1.nc
, precip_2.nc
, precip_3.nc,
and precip_4.nc
。您可以沿着记录维度将它们连接起来形成一个新的precip_all.nc
记录尺寸为长度 58400
ncrcat precip_1.nc precip_2.nc precip_3.nc precip_4.nc -O precip_all.nc
在 Python 中,我们现在只需要读入新的单个文件,然后提取并存储所需网格单元的时间序列。像这样的事情:
import netCDF4
import numpy as np
yindexlist = [1,2,3]
xindexlist = [4,5,6]
ngridcell = len(xidx)
ntimestep = 58400
# Define an empty 2D array to store time series of precip for a set of grid cells
timeseries_per_grid_cell = np.zeros([ngridcell, ntimestep])
ncfile = netCDF4.Dataset('path/to/file/precip_all.nc', 'r')
# Note that precip is 3D, so need to read in all dimensions
precip = ncfile.variables['precip'][:,:,:]
for i in range(ngridcell):
timeseries_per_grid_cell[i,:] = precip[:, yindexlist[i], xindexlist[i]]
ncfile.close()
如果您必须仅使用 Python,则需要跟踪各个文件形成的时间索引块以生成完整的时间序列。 58400/4 = 每个文件 14600 个时间步。因此,您将有另一个循环来读取每个单独的文件并存储相应的时间片段,即第一个文件将填充 0-14599,第二个文件将填充 14600-29199,等等。