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 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?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Hay un error en el código proporcionado en el argumento coords. El argumento coords 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:

        data_xr = xr.DataArray(atae, coords={'lat': lat_atae, 'lon': lon_atae, 'time': time_atae}, 
                                dims=['lat', 'lon', 'time'])
    

    Este código especifica el argumento coords como un diccionario que mapea los nombres de las dimensiones a arreglos de coordenadas.

Comments are closed.