2016-09-18 106 views
1

我想多的netCDF文件具有相同的尺寸相结合,其尺寸如下:错误使用xarray open_mfdataset功能

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 

如何解决此错误?我的尺寸中的所有文件

回答

1

这个错误信息可能是因为你有两个文件具有相同的变量和坐标值,而xarray不知道它是否应该沿着一个新维度堆叠它们,或者只是检查以确保没有值冲突。

如果明确地调用open_mfdatasetconcat_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在做什么。

+0

,将使用这个。期待v0.9! – user308827

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参数相同。从数据推断它有问题。

Dimension to concatenate files along. This argument is passed on to xarray.auto_combine() along with the dataset objects. You only need to provide this argument if the dimension along which you want to concatenate is not a dimension in the original datasets, e.g., if you want to stack a collection of 2D arrays along a third dimension.

这些三维数组是否需要沿着新的第四维堆叠?

+0

谢谢@hpaulj,我不知道为什么它有问题。也不确定concat_dim所需的格式。文档说它应该是字符串或数据阵列,但我有4个维度:lat,loon,time,nv – user308827

+0

这些netCDF文件具有完全相同的维度,但具有不同的变量。我想输出的NetCDF文件包含所有不同的变量,当然感谢@Stephan的尺寸 – user308827