es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo expandir una variable de datos a lo largo de una dimensión de tiempo utilizando xarray?

Tengo un DataSet ds_object que se ve así:

ds_object
<xarray.dataset>
Dimensions:    (time: 14392)
Coordinates:
  * time       (time) datetime64[ns] 2021-08-28T00:00:02.14...
Data variables:
    variable  .......

Donde “variable” es:

<xarray.dataarray 'variable'="" ()="">
array(0., dtype=float32)
Attributes:
   units:      count

Estoy tratando de expandir la variable “variable” unidimensionalmente en función del tiempo. En esencia, cambiar ‘variable’ de un array de 0 dimensiones a un array de 1 dimensión, con forma (1, 14392). La longitud de variable será entonces la misma que la de ‘time’, pero con el valor singular de variable repetido 14392 veces.

Pude hacer esto:

variable = np.full((1, len(time)), variable)

Esto le da a variable la forma que necesito, pero por alguna razón se convierte en una variable de coordenadas para ds_object:

ds_object = ds_object.assign(variable_new=(variable[0]))
print(ds_object)

<xarray.dataset>
Dimensions: (time: 13164, variable_new: 13164)
Coordinates:
  * time                  (time) datetime64[ns] 2021-08-28T00:00:02.14...
  * variable_new          (variable_new) float32 0.0 0.0 ... 0.0
Data variables: (12/28)

¿Por qué ocurre esto? ¿Cómo puedo agregar variable_new a ds_object como una nueva variable de datos?</xarray.dataset></xarray.dataarray></xarray.dataset>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Esto ocurre porque al utilizar ds_object.assign(), cualquier arreglo de numpy se interpreta de forma predeterminada como variables de coordenadas. Para agregar variable_new como una variable de datos en su lugar, puedes utilizar el método xr.DataArray() para crear un nuevo arreglo de datos de xarray y luego asignarlo a ds_object utilizando el mismo nombre de variable:

    import xarray as xr
    
    variable_new = xr.DataArray(variable, dims=('time',), coords={'time': ds_object.time})
    ds_object = ds_object.assign(variable_new=variable_new)
    print(ds_object)
    

    Esto debería darte ds_object con variable_new agregada como una nueva variable de datos, con la forma correcta de (14392,).

Comments are closed.