¿Hay una manera simple de aplanar un conjunto de datos de xarray en una sola matriz nudosa de 1D?

Por ejemplo, aplanar el siguiente conjunto de datos de prueba:

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

Para

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

?

4
user7821537 31 oct. 2017 a las 15:02

3 respuestas

La mejor respuesta

A partir de julio de 2019, xarray ahora tiene las funciones to_stacked_array y to_unstacked_dataset que realizan esta función.

0
user7821537 11 jul. 2019 a las 10:27

Obtener conjunto de datos de la pregunta:

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

Obtenga la lista de variables de datos:

variables = ds.data_vars

Utilice el np.flatten() método para reducir matrices a 1D:

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

Luego expanda la lista de matrices 1D (como detallado en esta respuesta):

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

Ahora convierta esto a una matriz como se solicita en Q (como actualmente una lista):

array = np.array(arrays)
0
tsherwen 13 nov. 2017 a las 12:12

Si está de acuerdo con los valores repetidos, puede usar .to_array() y luego aplanar los valores en NumPy, por ejemplo,

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

Si no desea valores repetidos, deberá escribir algo usted mismo, por ejemplo,

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

En términos más generales, esto suena algo similar a una interfaz propuesta para "apilar" variables de datos en 2D para aplicaciones de aprendizaje automático: https://github.com/pydata/xarray/issues/1317

2
shoyer 31 oct. 2017 a las 18:14