使用 python 从 netCDF 的某个坐标处随时间读取值

Read value over time at certain coordinate from netCDF with python

我有一个带网格的 netCDF 文件(每步 0.25°)。 我想要的是变量的值,比如说 tempMax,在过去 50 年的某个网格点。

我知道您是这样将数据读入 python

lon = numpy.array(file.variables['longitude'][:])
lat = numpy.array(file.variables['latitude'][:])
temp = numpy.array(file.variables['tempMax'][:])
time = numpy.array(file.variables['time'][:])

这给我留下了一个数组,但我不知道如何 "untangle" 它。 如何获取整个时间(存储在时间中)的某个坐标(存储在温度中)的值? S显示的是某坐标随时间变化的值。

有什么想法可以实现吗?

谢谢!

我猜 tempMax 是 3D(时间 x 纬度 x 经度),然后应该读入

temp = ncfile.variables['tempMAx'][:,:,:]

(注意两点:(1) 如果您使用的是 Python v2,最好避免使用 file 一词,而是使用 ncfile 之类的词,如上所示, (2)temp会自动存储为numpy.ndarray,只要调用上面的方法即可,读入变量时不需要使用numpy.array()命令。)

现在您可以使用

提取特定位置所有时间的温度
temp_crd = temp[:,lat_idx,lon_idx] 

其中lat_idxlon_idx是对应经纬度坐标索引的整数。如果您事先知道这些索引,很好,只需插入它们,例如temp_crd = temp[:,25,30]。 (可以使用工具ncdump查看netCDF文件的内容,https://www.unidata.ucar.edu/software/netcdf/docs/netcdf/ncdump.html

更有可能的情况是您知道坐标,但事先不知道它们的索引。假设您需要 50N 和 270E 的温度。您可以使用 numpy.where 函数提取您已经读入的 latlon 数组的坐标索引。

lat_idx = numpy.where(lat==50)[0][0]
lon_idx = numpy.where(lon==270)[0][0]

tmp_crd = temp[:,lat_idx,lon_idx]