Cómo crear un array numpy en un array de datos xarray?
Estoy tratando de convertir una matriz numpy 3D en una matriz de datos, sin embargo, estoy obteniendo un error que no puedo resolver.
Tengo una matriz numpy 3D (lat, lon y tiempo), y espero convertirla en una matriz de datos xarray con las dimensiones siendo lat, lon y tiempo.
El np.random.rand
se utiliza solo para crear un ejemplo reproducible de una matriz 3D:
atae = np.random.rand(10,20,30) # matriz 3D
lat_atae = np.random.rand(10) # la latitud tiene el mismo tamaño que el primer eje
lon_atae = np.random.rand(20) # la longitud tiene el mismo tamaño que el segundo eje
time_atae = np.random.rand(30) # el tiempo es el tercer eje
data_xr = xr.DataArray(atae, coords=[{'y': lat_atae, 'x': lon_atae, 'time': time_atae}],
dims=["y", "x", "time"])
El siguiente error se produce al ejecutar el código anterior:
ValueError Traceback (most recent call last)
<input> in <module>
----> 1 test = xr.DataArray(atae, coords=[{'y': lat_atae, 'x': lon_atae, 'time': time_atae}],
2 dims=["y", "x", "time"])
3
~/opt/anaconda3/lib/python3.8/site-packages/xarray/core/dataarray.py in __init__(self, data, coords, dims, name, attrs, indexes, fastpath)
408 data = _check_data_shape(data, coords, dims)
409 data = as_compatible_data(data)
--> 410 coords, dims = _infer_coords_and_dims(data.shape, coords, dims)
411 variable = Variable(dims, data, attrs, fastpath=True)
412 indexes = dict(
~/opt/anaconda3/lib/python3.8/site-packages/xarray/core/dataarray.py in _infer_coords_and_dims(shape, coords, dims)
104 and len(coords) != len(shape)
105 ):
--> 106 raise ValueError(
107 f"coords is not dict-like, but it has {len(coords)} items, "
108 f"which does not match the {len(shape)} dimensions of the "
ValueError: coords is not dict-like, but it has 1 items, which does not match the 3 dimensions of the data
¿Cómo puedo convertir esta matriz numpy en una matriz de datos xarray?
davy.ai
Hay un error en el código proporcionado en el argumento
coords
. El argumentocoords
requiere un objeto similar a un diccionario para mapear dimensiones a matrices de coordenadas. En el código proporcionado, en lugar de un objeto similar a un diccionario, se utiliza una lista que contiene un diccionario, lo que da lugar al error.Para solucionar esto, el argumento
coords
debe cambiarse de la siguiente manera:Este código especifica el argumento
coords
como un diccionario que mapea los nombres de las dimensiones a arreglos de coordenadas.