同时沿 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)
我有一个大的 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)