【问题标题】:KeyError when calling on dimension in NetCDF file调用 NetCDF 文件中的维度时出现 KeyError
【发布时间】:2017-11-17 03:25:50
【问题描述】:

我的目标是导入一个 NetCDF 文件并提取其中存储的基础变量。我一直在关注这个guide

到目前为止,这是我的代码:

from netCDF4 import Dataset
import numpy as np

fileName = 'LES_cloud_fields.nc.cdf'
fdata = Dataset(fileName, 'r', format="NETCDF4")
print(fdata.dimensions)
print(fdata.variables['nz'][:])
fdata.close()

我得到错误:KeyError: 'nz'

任何想法、指南或提示将不胜感激!

【问题讨论】:

  • 您能检查一下nz 是否在fdata.variables 中吗?
  • fdata.variables 是字典,KeyError: 'nz' 只是告诉你nz 不在其中。

标签: python-3.x netcdf


【解决方案1】:

我怀疑问题在于维度和变量之间的混淆。在像 LES 这样的(大气)模型中,很常见的是同时看到名为 z 的维度和变量(或开发人员决定使用的任何名称),但情况并非总是如此,以及维度上的信息(包含实际高度水平)可以不同地命名。考虑这个最小的例子:

from netCDF4 import Dataset
import numpy as np

f = Dataset('file.nc', 'w')
dim_z = f.createDimension('z', 10)
var_z = f.createVariable('z', 'f4', ('z', ))
var_z[:] = np.arange(10)

print(f.dimensions)         # output: OrderedDict([('z', ....
print(f.variables['z'][:])  # output: [ 0.  1.  2.  3.  4.  ...

这可能是您所期望的:有一个维度z,它也可以作为变量使用。但是,如果开发人员决定执行以下操作:

f = Dataset('file.nc', 'w')
dim_z = f.createDimension('z', 10)
var_z = f.createVariable('height', 'f4', ('z', ))
var_z[:] = np.arange(10)

print(f.dimensions)         # output: OrderedDict([('z', ....
print(f.variables['z'][:])  # output: KeyError: 'z'

维度称为z,但值存储在名为height 的变量中,最后一行给出的错误与您的类似。

【讨论】:

  • 这正是我所需要的!我只是把变量和维度搞混了。我现在都说得通了。谢谢!
猜你喜欢
  • 2013-12-11
  • 2018-03-20
  • 2013-09-22
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 2017-05-20
  • 2018-05-03
  • 2015-02-05
相关资源
最近更新 更多