Xarray combine_by_coords return 单调全局索引错误

Xarray combine_by_coords return the monotonic global index error

我正在尝试使用 combine_by_coords 合并两个空间 xarray 数据集。这两个数据集是彼此相邻的两个图块。所以有重叠的坐标。在重叠区域中,其中一个数据集的变量值为nan。

我使用了带有 compat='no_conflicts' 选项的“combine_by_coords”。但是,它 returns 沿维度 y 的单调全局索引错误。以前好像是个问题,但已修复 (here). So I don't really know why I get this error. Here is an example (the netcdf tiles are here):

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

谢谢

这不是错误,它抛出了根据您的输入应该抛出的错误。但是我可以看到文档并没有很清楚地说明为什么会这样!

combine_by_coordscombine_nested 做两件事:它们连接(使用 xr.concat)和合并(使用 xr.merge)。 merge 将相同大小的变量分组,concat 将不同大小的变量连接到彼此的末端。连接步骤永远不应该处理部分重叠的坐标,因此 combine 函数具有相同的限制。

该错误是对您提供的输入的明确拒绝:“您给了我重叠的坐标,我不知道如何连接它们,所以我会拒绝它们。”通常这是有道理的——当重叠坐标不是 NaN 时,那么选择哪个值是不明确的。

在您的情况下,您要求它执行定义明确的操作,文档中关于合并重叠坐标的讨论 here 暗示 compat='no_conflicts' 可以处理这种情况。不幸的是,这仅适用于 xr.merge,不适用于 xr.concat,因此它也不适用于 combine_by_coords。这绝对令人困惑。

可能 可以概括 combine 函数来处理您正在描述的场景(其中坐标的重叠部分完全由非-NaN 值)。如果您想查看此功能,请提出一个问题。

(问题 #3150 与其他问题有关,这是处理“在每个数据集之间不变化的坐标维度”的实际错误。)

相反,您需要做的是先 trim 关闭重叠。这应该不难——大概你知道(或可以确定)你的重叠有多大,并且你所有的 NaN 都在一个数据集上。您只需要对切片使用 .isel() 方法。一旦你摆脱了重叠的 NaN,那么你应该能够很好地组合它(并且你也不需要指定 compat )。如果您使用 combine_by_coords 作为使用 open_mfdataset 打开许多文件的一部分,那么编写一个 trimming 函数可能会更容易,您首先使用 preprocess 参数将其应用到open_mfdataset.