如何将xarray数据集展平为一维numpy数组?

8

有没有一种简单的方法将xarray数据集展平为一个单独的一维numpy数组?

例如,将以下测试数据集展平:

xr.Dataset({
    'a' : xr.DataArray(
                   data=[10,11,12,13,14],
                   coords={'x':[0,1,2,3,4]},
                   dims={'x':5}
          ),
    'b' : xr.DataArray(data=1,coords={'y':0}),
    'c' : xr.DataArray(data=2,coords={'y':0}),
    'd' : xr.DataArray(data=3,coords={'y':0})
})

为了

[10,11,12,13,14,1,2,3]

?


你可以尝试使用to_dict()方法将你的数据集转换为字典,然后像普通字典一样解析每个data_vars键的"data"值,但我不确定这是否是最快的方法。 - BoboDarph
3个回答

6

6

如果你可以接受重复的值,你可以使用 .to_array() 然后在 NumPy 中展开这些值,例如:

>>> ds.to_array().values.ravel()
array([10, 11, 12, 13, 14,  1,  1,  1,  1,  1,  2,  2,  2,  2,  2,  3,  3,
        3,  3,  3])

如果您不想要重复的值,那么您需要自己编写一些代码,例如:

>>> np.concatenate([v.values.ravel() for v in ds.data_vars.values()])
array([10, 11, 12, 13, 14,  1,  2,  3])

更普遍地说,这听起来有些类似于一个用于机器学习应用程序中将数据变量在2D中“堆叠”的界面提议:https://github.com/pydata/xarray/issues/1317

谢谢提供链接!这正是我想要做的。 - user7821537

1
从问题中获取数据集:
ds = xr.Dataset({
'a' : xr.DataArray(
               data=[10,11,12,13,14],
               coords={'x':[0,1,2,3,4]},
               dims={'x':5}
      ),
'b' : xr.DataArray(data=1,coords={'y':0}),
'c' : xr.DataArray(data=2,coords={'y':0}),
'd' : xr.DataArray(data=3,coords={'y':0})
})

获取数据变量列表:
variables = ds.data_vars

使用np.flatten()方法将数组降为一维:
arrays = [ ds[i].values.flatten() for i in variables ] 

然后扩展1D数组列表(如在此答案中详细说明):

arrays = [i for j in arrays for i in j  ]

现在按照 Q 的要求将此转换为数组(因为当前为列表):
array = np.array(arrays)

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