合并 Xarray 的 DataArrays

Merging Xarray's DataArrays

假设我们确实有多个具有指定坐标的值:

a = []
a.append(xr.DataArray([[5.]], dims=('x', 'y'), coords=dict(x=[1.],y=[2.])))
a.append(xr.DataArray([[1.]], dims=('x', 'y'), coords=dict(x=[2.],y=[2.])))
a.append(xr.DataArray([[2.]], dims=('x', 'y'), coords=dict(x=[1.],y=[1.])))

我现在想将 a 中的所有 DataArray 组合成一个具有组合坐标的新 DataArray。 IE。分配坐标的三个值 5、1、2。未提供(缺失)的值可以用任何东西填充(0、None、…)。

如果我沿着一个轴做这个操作,我会使用concatenate,但是如果是多个维度我应该怎么做呢?非常感谢您的帮助!

您可以使用 combine_by_coords。它适用于数据集,因此您需要使用数据集或设置 DataArrays 的 name

a = []
a.append(xr.DataArray([[5.]], dims=('x', 'y'), coords=dict(x=[1.],y=[2.]), name="var")) 
a.append(xr.DataArray([[1.]], dims=('x', 'y'), coords=dict(x=[2.],y=[2.]), name="var")) 
a.append(xr.DataArray([[2.]], dims=('x', 'y'), coords=dict(x=[1.],y=[1.]), name="var"))

xr.combine_by_coords(a)
# Output
# <xarray.Dataset>
# Dimensions:  (x: 2, y: 2)
# Coordinates:
#   * x        (x) float64 1.0 2.0
#   * y        (y) float64 1.0 2.0
# Data variables:
#     var      (x, y) float64 2.0 5.0 nan 1.0

为了避免在从 DataArray 到 Dataset 的转换过程中出现意外结果和警告,我建议首先将对象显式转换为 Dataset,然后使用 combine_by_coords,并在需要时最终转换回 DataArray。