扩展xarray维度

8
有没有现有的方法或途径可以扩展 xarray.DataArray 对象的维度(和坐标)?
我想获得类似于np.expand_dims 的东西,同时为新扩展的 DataArray 定义一个新的维度和坐标变量。
使用 DataArray.assign_coords() 可以创建一个新的坐标变量,但数组本身没有通过新轴扩展。

在“扩展坐标”中,您期望的输出是什么?与NumPy不同,“pandas”和“xarray”(以前称为“xray”)是面向nd-table的,因此在pandas / xray中没有空维度是有意义的。 - Imanol Luengo
我在某个维度上集成了一些DataArray,结果这个维度被删除了,但是我需要保留(或重新创建)该维度(长度为1,不为空)在集成的DataArray中,因为我使用DataArray的一些其他函数/方法期望它存在。 - rafa
1
这个链接中的任何内容对你有帮助吗?(也许是stack/unstack部分) - Imanol Luengo
2个回答

10
在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'

1
我们如何将多个坐标添加到 y 维度中,例如 y = [coord_value1, coord_value2, ..., coord_value10]? - alextc
@alextc 你可以通过 data.expand_dims(dim=dict(y=[coord_value1, coord_value2,..., coord_value10])) 一次性实现这个功能。 - Fei Yao

5
我认为有一种方法来实现这个功能会很有用。目前xarray没有直接提供,但我建议您在GitHub上提交问题,以讨论新功能的API和/或实现拉取请求。
新的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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接