同时沿 2 个维度连接 xarray DataArrays

Concatenate xarray DataArrays simultaneously along 2 dimensions

我有一个大的 2D 域,它在几个 xarray DataArrays 中被分解成大小相同的 2D 块。因此,例如,我所拥有的模拟是:

a=xr.DataArray(np.random.rand(4,4)+0, dims=("x", "y"), coords=dict(x=range(4), y=range(4)))
b=xr.DataArray(np.random.rand(4,4)+1, dims=("x", "y"), coords=dict(x=range(4,8), y=range(4)))
c=xr.DataArray(np.random.rand(4,4)+2, dims=("x", "y"), coords=dict(x=range(4,8), y=range(4,8)))

我正在尝试将所有这些补丁放在一起以重新创建域。所以在上面的例子中,如果我要连接所有东西,我会在最后有一个 8 x 8 的矩阵(其中一个 "patches" 作为 np.nan),其他三个补丁对应于它们各自的 DataArrays。

我一直在尝试使用 xarray 将其自动化,但到目前为止我还没有成功。我最接近的尝试是使用 xr.concat:

d=xr.concat([a,b,c], dim="x")
d.plot.imshow(x="x")

这会产生下面的图像,这显然是错误的:

请注意,在我的例子中,补丁都是乱序的,所以我不能真正依赖特定的顺序来连接。例如,在这里,我可以做 d=xr.concat([xr.concat([a,b], dim="x"), c], dim="y"),但只是因为我知道顺序。

PS:这可能和this question有点关系,虽然我不清楚这个问题到底问的是什么。

发现我们可以通过顺序应用 combine_first 来做到这一点。这并不理想,因为我必须在给定大量 DataArray 的情况下迭代应用它,但它已经足够好了:

d=a.combine_first(c).combine_first(b)