向 xarray DataArray 添加维度
add dimension to an xarray DataArray
我需要向 DataArray
添加一个维度,填充新维度中的值。这是原始数组。
a_size = 10
a_coords = np.linspace(0, 1, a_size)
b_size = 5
b_coords = np.linspace(0, 1, b_size)
# original 1-dimensional array
x = xr.DataArray(
np.random.random(a_size),
coords=[('a', a coords)])
我想我可以创建一个具有新维度的空 DataArray 并将现有数据复制到其中。
y = xr.DataArray(
np.empty((b_size, a_size),
coords=([('b', b_coords), ('a', a_coords)])
y[:] = x
一个更好的主意可能是使用 concat
。我花了一段时间才弄清楚如何为 concat 维度指定 dims 和 coords,这些选项中的 none 看起来很棒。有没有我遗漏的东西可以使这个版本更干净?
# specify the dimension name, then set the coordinates
y = xr.concat([x for _ in b_coords], 'b')
y['b'] = b_coords
# specify the coordinates, then rename the dimension
y = xr.concat([x for _ in b_coords], b_coords)
y.rename({'concat_dim': 'b'})
# use a DataArray as the concat dimension
y = xr.concat(
[x for _ in b_coords],
xr.DataArray(b_coords, name='b', dims=['b']))
不过,有没有比上述两个选项中的任何一个更好的方法来做到这一点?
您对当前的选项进行了相当透彻的分析,确实 none 其中非常干净。
这肯定是为 xarray 编写的有用功能,但还没有人开始实施它。也许您有兴趣帮忙?
请参阅此 GitHub 问题以了解一些 API 提案:https://github.com/pydata/xarray/issues/170
由于数学应用于新维度的方式,我喜欢乘以添加新维度。
identityb = xr.DataArray(np.ones_like(b_coords), coords=[('b', b_coords)])
y = x * identityb
如果 DA
是长度为 DimLen
的数据数组,您现在可以使用 expand_dims
:
DA.expand_dims({'NewDim':DimLen})
参考题目语法:
y = x.expand_dims({"b": b_coords})
使用.assign_coords
方法即可。但是,您不能将坐标分配给不存在的维度,作为一个班轮的方法是:
y = x.expand_dims({b_coords.name: b_size}).assign_coords({b_coords.name: b_coords})
我需要向 DataArray
添加一个维度,填充新维度中的值。这是原始数组。
a_size = 10
a_coords = np.linspace(0, 1, a_size)
b_size = 5
b_coords = np.linspace(0, 1, b_size)
# original 1-dimensional array
x = xr.DataArray(
np.random.random(a_size),
coords=[('a', a coords)])
我想我可以创建一个具有新维度的空 DataArray 并将现有数据复制到其中。
y = xr.DataArray(
np.empty((b_size, a_size),
coords=([('b', b_coords), ('a', a_coords)])
y[:] = x
一个更好的主意可能是使用 concat
。我花了一段时间才弄清楚如何为 concat 维度指定 dims 和 coords,这些选项中的 none 看起来很棒。有没有我遗漏的东西可以使这个版本更干净?
# specify the dimension name, then set the coordinates
y = xr.concat([x for _ in b_coords], 'b')
y['b'] = b_coords
# specify the coordinates, then rename the dimension
y = xr.concat([x for _ in b_coords], b_coords)
y.rename({'concat_dim': 'b'})
# use a DataArray as the concat dimension
y = xr.concat(
[x for _ in b_coords],
xr.DataArray(b_coords, name='b', dims=['b']))
不过,有没有比上述两个选项中的任何一个更好的方法来做到这一点?
您对当前的选项进行了相当透彻的分析,确实 none 其中非常干净。
这肯定是为 xarray 编写的有用功能,但还没有人开始实施它。也许您有兴趣帮忙?
请参阅此 GitHub 问题以了解一些 API 提案:https://github.com/pydata/xarray/issues/170
由于数学应用于新维度的方式,我喜欢乘以添加新维度。
identityb = xr.DataArray(np.ones_like(b_coords), coords=[('b', b_coords)])
y = x * identityb
如果 DA
是长度为 DimLen
的数据数组,您现在可以使用 expand_dims
:
DA.expand_dims({'NewDim':DimLen})
参考题目语法:
y = x.expand_dims({"b": b_coords})
使用.assign_coords
方法即可。但是,您不能将坐标分配给不存在的维度,作为一个班轮的方法是:
y = x.expand_dims({b_coords.name: b_size}).assign_coords({b_coords.name: b_coords})