我正在尝试使用combine_by_coords组合两个空间xarray数据集。这两个数据集是相邻的两个块。所以有重叠的坐标。在重叠区域中,其中一个数据集的变量值是nan。
我使用了"combine_by_coords“和compat='no_conflicts‘选项。然而,它返回沿维数y误差的单调全局索引。看起来它以前是一个问题,但它是固定的(这里)。所以我真的不知道为什么我会犯这个错误。下面是一个示例( netcdf块是这里):
import xarray as xr
print(xr.__version__)
>>>0.15.1
ds1=xr.open_dataset('Tile1.nc')
ds2=xr.open_dataset('Tile2.nc')
ds = xr.combine_by_coords([ds1,ds2], compat='no_conflicts')
>>>...
ValueError: Resulting object does not have monotonic global indexes along dimension y谢谢
发布于 2020-07-12 10:45:24
这不是一个错误,它是抛出错误,它应该抛出你的输入。但是,我可以看到,这些文档并没有非常清楚地说明为什么会发生这种情况!
combine_by_coords和combine_nested做了两件事:它们连接(使用xr.concat)和合并(使用xr.merge)。merge将相同大小的变量分组,concat将不同大小的变量连接到另一个变量的末端。级联步骤不应该处理部分重叠的坐标,因此combine函数具有相同的限制。
该错误是对输入的明确拒绝:“您给了我重叠的坐标,我不知道如何连接这些坐标,所以我会拒绝它们。”通常情况下,这是有意义的--当重叠坐标不是NaNs时,对于要选择哪些值就不太清楚了。
在您的例子中,您要求它执行定义良好的操作,而文档中关于合并重叠坐标这里的讨论意味着compat='no_conflicts'将处理这种情况。不幸的是,这只适用于xr.merge,而不是xr.concat,因此它也不适用于combine_by_coords。这绝对是令人困惑的。
可以泛化combine函数来处理所描述的场景(坐标的重叠部分完全由非NaN值指定)。请打开一个问题,提出这个功能,如果你想看到它。
(问题#3150是关于其他问题的,在处理“每个数据集之间不变化的坐标维度”方面的实际错误。)
相反,您需要做的是首先减少重叠。这应该不难--想必你知道(或者可以确定)你的重叠有多大,而且你所有的NaNs都在一个数据集中。只需使用带片的.isel()方法即可。一旦您摆脱了重叠的NaNs,那么您应该能够很好地组合它(并且您也不需要指定compat )。如果您使用combine_by_coords作为使用open_mfdataset打开许多文件的一部分,那么编写修整函数可能会更容易,首先使用preprocess参数对open_mfdataset应用该函数。
https://stackoverflow.com/questions/62806175
复制相似问题