扩展维度 xarray

Expand dimensions xarray

是否存在扩展 xarray.DataArray 对象的维度(和坐标)的现有方法或途径?

我想获得类似于np.expand_dims的东西,同时为新扩展DataArray定义新的维度和坐标变量。

使用 DataArray.assign_coords() 我可以创建一个新的坐标变量,但数组本身没有用新轴扩展。

我同意执行此操作的某种方法会很有用。它目前不直接存在于 xarray 中,但我鼓励您提交 issue on GitHub 来讨论 API 新功能 and/or 提出实现它的拉取请求。

新的 xarray.broadcast 函数包含一些可能足以满足此目的的相关功能:

import xarray as xr
import numpy as np
data = xr.DataArray([1, 2, 3], dims='x')
other = xr.DataArray(np.zeros(4), coords=[('y', list('abcd'))])
data2, other2 = xr.broadcast(data, other)
print(data2)
# <xarray.DataArray (x: 3, y: 4)>
# array([[1, 1, 1, 1],
#       [2, 2, 2, 2],
#       [3, 3, 3, 3]])
# Coordinates:
#   * x        (x) int64 0 1 2
#   * y        (y) |S1 'a' 'b' 'c' 'd'

在xarray v0.10.0中,我使用assign_coords()expand_dims()的组合来添加新的维度和坐标变量。

例如:

import xarray as xr
import numpy as np
data = xr.DataArray([1, 2, 3], dims='x', coords={'x': [10, 20, 30]})
data_newcoord = data.assign_coords(y='coord_value')
data_expanded = data_newcoord.expand_dims('y')
print(data_expanded)
# <xarray.DataArray (y: 1, x: 3)>
# array([[1, 2, 3]])
# Coordinates:
#   * x        (x) int64 10 20 30
#   * y        (y) <U11 'coord_value'