python - 通过python从netCDF中提取特定位置的数据

标签 python netcdf netcdf4

我是 Python 的新手,也是 NetCDF 的新手,如果我不清楚,请见谅。 我有一个包含多个变量的 nc 文件,我需要以新顺序从这些 nc 文件中提取数据。

我的 nc 文件有 8 个变量(经度、纬度、时间、u10、v10、swh、mwd、mwp),我尝试的逻辑是“如果我输入经度和纬度,我的程序会输出其他变量(u10、 v10, swh, mwd, mwp) 按时间排序。”然后我会把提取的数据放在另一个数据库中。

我测试了我的 nc 文件如下:

import netCDF4
from netCDF4 import Dataset

jan = Dataset('2016_01.nc')
print jan.variables.keys()

lon = jan.variables['longitude']
lat = jan.variables['latitude']
time = jan.variables['time']

for d in jan.dimensions.items():
    print d

lon_array = lon[:]
lat_array = lat[:]
time_array = time[:]

print lon_array
print lat_array
print time_array

部分结果如下

[u'longitude', u'latitude', u'time', u'u10', u'v10', u'swh', u'mwd', u'mwp']

(u'longitude', <type 'netCDF4._netCDF4.Dimension'>: name = 'longitude', size = 1440)

(u'latitude', <type 'netCDF4._netCDF4.Dimension'>: name = 'latitude', size = 721)

(u'time', <type 'netCDF4._netCDF4.Dimension'> (unlimited): name = 'time', size = 186)

如有任何建议,我们将不胜感激。 谢谢。

最佳答案

2022 编辑:现在使用 xarray 更容易,如 Adrian 的回答所示:https://stackoverflow.com/a/74599597/3581217


您首先需要知道时间/空间变化变量中维度的顺序,例如u10,您可以通过以下方式获得:

u10 = jan.variables['u10']
print(u10.dimensions)

接下来是正确切片/索引数组的问题。如果你想要数据让我们说 latitude=30, longitude = 10,相应的(最接近的)索引可以用(after importing Numpy as import numpy as np):

i = np.abs(lon_array - 10).argmin()
j = np.abs(lat_array - 30).argmin()

假设 u10 的维度排序为 {time, lat, lon},您可以读取数据为:

u10_time = u10[:,j,i]

这会为您提供所请求位置的所有(随时间变化的)u10 值。

关于python - 通过python从netCDF中提取特定位置的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45582344/

相关文章:

python - TypeError:只能将元组(不是 "float")连接到元组,密度公式有问题

python - 如果嵌套,有什么方法可以改进代码?

netcdf - 使用 NCO 从 1D 变量创建 3D 变量

python - 使用Python在netCDF4中使用scale_factor和add_offset的示例?

python - 为什么我得到 "UserWarning: Module dap was already imported from None ..."

pandas - 从 ERA5 再分析中提取移动船舶的时间和空间变量

python-3.x - 更改 netCDF 文件的网格大小

python - 如何将日期时间信息写入netcdf4?

python netCDF4 在 Mac 操作系统上突然停止工作

python - 如何在源代码预览中压缩/删除多个空白行