合并 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。
假设我们确实有多个具有指定坐标的值:
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。