如何将xarray数据集展平为1D numpy数组?

时间:2017-10-31 12:02:15

标签: python python-xarray xarray

是否有一种简单的方法可以将xarray数据集展平为单个1D 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]

3 个答案:

答案 0 :(得分:2)

如果您对重复值感到满意,可以使用For i = 1 To 5 Select Case i Case 1 'Do Something Case 2 'Do Something Case 3 'Do Something Exit For ' Break Code Case 4 Exit For ' Break Code Case Else End Select Next i ,然后在NumPy中展平值,例如,

.to_array()

如果您不想重复值,那么您需要自己写一些东西,例如,

>>> 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])

更一般地说,这听起来有点类似于"堆叠"用于机器学习应用程序的2D数据变量:https://github.com/pydata/xarray/issues/1317

答案 1 :(得分:0)

从问题中获取数据集:

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()方法将数组减少到1D:

arrays = [ ds[i].values.flatten() for i in variables ] 

然后展开一维数组列表(detailed in this answer):

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

现在将其转换为Q中请求的数组(目前为列表):

array = np.array(arrays)

答案 2 :(得分:0)

截至2019年7月,xarray现在具有执行此功能的功能to_stacked_arrayto_unstacked_dataset