我正在尝试将多个netCDF文件组合在一起,尺寸相同,尺寸如下:
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
OrderedDict([(u'lat', <type 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 720
), (u'lon', <type 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 1440
), (u'time', <type 'netCDF4._netCDF4.Dimension'>: name = 'time', size = 96
), (u'nv', <type 'netCDF4._netCDF4.Dimension'>: name = 'nv', size = 2
)])
但是,在使用open_mfdataset时,我收到此错误:
xr.open_mfdataset(path_file, decode_times=False)
*** ValueError: cannot infer dimension to concatenate: supply the ``concat_dim`` argument explicitly
如何解决此错误?我的尺寸在所有文件中都相同
答案 0 :(得分:1)
http://xarray.pydata.org/en/stable/generated/xarray.open_mfdataset.html
xarray.open_mfdataset(paths, chunks=None, concat_dim=None, preprocess=None, engine=None, lock=None, **kwargs)
看起来需要您提供concat_dim
参数。从数据中推断它有问题。
连接文件的维度。此参数与数据集对象一起传递给xarray.auto_combine()。如果要连接的维度不是原始数据集中的维度,则只需要提供此参数,例如,如果要沿第三维堆叠2D数组的集合。
您想要沿着新的第4维度堆叠这些3d数组吗?
答案 1 :(得分:1)
可能会出现此错误消息,因为您有两个具有相同变量和坐标值的文件,并且xarray不知道它是否应该沿着新维度将它们堆叠在一起,或者只是检查以确保没有值冲突。
如果open_mfdataset
显式调用concat_dim=None
禁用所有连接尝试,那将是很好的。 This change应该进入下一版xarray(v0.9.0)。
与此同时,您可以通过单独打开文件并明确合并它们来解决此问题,例如,
def open_mfdataset_merge_only(paths, **kwargs):
if isinstance(paths, basestring):
paths = sorted(glob(paths))
return xr.merge([xr.open_dataset(path, **kwargs) for path in paths])
在幕后,这基本上就是open_mfdataset
正在做的所有事情。