¿Cómo alinear un DataArray de xarray con una dimensión de longitud 1 con una matriz más grande?
Me gustaría tomar un conjunto de datos de xarray con una dimensión de tiempo de 1 y simplemente replicar los datos para aumentar la dimensión del tiempo de 1 a N. ¿Cuál es la forma más eficiente de hacer esto? He intentado varios métodos como expand_dims y stack, pero ninguno de ellos parece hacer lo que quiero.
En última instancia, quiero poder hacer
moc10_H11 – moc_ctrl_clim
Donde el resultado tendría las mismas dimensiones que moc10_H11 (35). En este momento, cuando hago esto, la dimensión de tiempo de la salida es solo 1.
Para mayor claridad, moc_ctrl_clim es:
xarray.Dataset
Dimensiones:
tiempo: 1, lat_aux_grid: 395, moc_z: 61
Coordenadas: tiempo (tiempo) objeto 0001-01-01 00:00:00
lat_aux_grid (lat_aux_grid) float32 -79.49 -78.95 -78.42 … 89.47 90.0
moc_z (moc_z) float32 0.0 1e+03 … 5.25e+05 5.5e+05
Variables de datos:
MOC (tiempo, moc_z, lat_aux_grid) float64
dask.array<chunksize=(1, 61, 395), meta=np.ndarray>
y moc10_H11 tiene:
xarray.Dataset
Dimensiones:
tiempo: 35, lat_aux_grid: 395, moc_z: 61
Coordenadas: tiempo (tiempo) objeto 0001-01-01 00:00:00
lat_aux_grid (lat_aux_grid) float32 -79.49 -78.95 -78.42 … 89.47 90.0
moc_z (moc_z) float32 0.0 1e+03 … 5.25e+05 5.5e+05
Variables de datos:
MOC (tiempo, moc_z, lat_aux_grid) float64
dask.array<chunksize=(1, 61, 395), meta=np.ndarray>
davy.ai
La manera más eficiente de aumentar la dimensión de tiempo de 1 a N en xarray es mediante el método “broadcast_like”.
Suponiendo que se tiene un conjunto de datos xarray “ds” con una dimensión de tiempo de 1, donde N es la longitud deseada de la dimensión de tiempo, el siguiente código replicará los datos a lo largo de la dimensión de tiempo para crear un nuevo conjunto de datos “new_ds” con una dimensión de tiempo de longitud N:
Este código primero crea un DataArray de ceros con la dimensión “time” igual a N, y luego lo transmite a la misma forma que el conjunto de datos original “ds”, con las mismas dimensiones excepto para la dimensión de tiempo. Los datos en “ds” se replican a lo largo de la nueva dimensión de tiempo de longitud N para crear “new_ds”.
Después de esta replicación, debería ser posible realizar la operación “moc10_H11 – moc_ctrl_clim” y obtener un resultado con las mismas dimensiones que “moc10_H11”.