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.

Tabla de consulta en xarray.

Entonces, quiero fusionar 2 conjuntos de datos, uno es un conjunto de datos de ráster de una sola banda que proviene de rioxarray.open_rasterio(), el otro es una tabla de búsqueda, con una dimensión de índice ‘mukey’. Las coordenadas a lo largo de ‘mukey’ corresponden a los valores de índice ‘mukey’ en la tabla de búsqueda. El resultado deseado es un conjunto de datos con coordenadas x e y idénticas al conjunto de datos de ráster, con variables ‘n’ y ‘K’ cuyos valores se llenan combinando en ‘mukey’. Si estás familiarizado con ArcGIS, esta es la operación análoga.

xr.merge() y assign() parecen no realizar exactamente esta operación, y hacer trampa convirtiendo en pandas o numpy causa problemas de memoria en mi máquina de 32GB. ¿Xarray proporciona alguna compatibilidad con este caso de uso simple? Gracias.

data = (np.abs(np.random.randn(12000000))).astype(np.int32).reshape(1,4000,3000)
raster = xr.DataArray(data, dims=['band', 'y', 'x'], coords=[[1],np.arange(4000),np.arange(3000)])
raster = raster.to_dataset(name='mukey')
raster

image

lookup = pd.DataFrame({'mukey':list(range(10)),'n':np.random.randn(10),'K':np.random.randn(10)*2}).set_index('mukey').to_xarray()
lookup

image

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para fusionar los dos conjuntos de datos basados en el índice ‘mukey’, xarray proporciona el método merge(), que se puede usar con on='mukey' para fusionar en este índice. Aquí hay un ejemplo de código:

    merged = xr.merge([raster, lookup], join='inner', compat='broadcast_equals', combine_attrs='drop')
    

    En este código, el parámetro join especifica que solo se incluirán los valores ‘mukey’ que coincidan en el conjunto de datos fusionado. El parámetro compat especifica cómo xarray debe alinear/transformar los datos durante la fusión, y ‘broadcast_equals’ significa que las dimensiones se alinearán y se transmitirán. Por último, el parámetro combine_attrs significa que se eliminarán los atributos en conflicto entre los conjuntos de datos.

    Después de la fusión, el conjunto de datos resultante tendrá las mismas coordenadas x e y que el conjunto de datos Raster original, con nuevas variables ‘n’ y ‘K’ completadas según la tabla de búsqueda.

    Ten en cuenta que si anticipas problemas de memoria con un conjunto de datos tan grande, es posible que desees usar matrices dask en lugar de matrices numpy para habilitar la computación paralela y la computación fuera de memoria.

Comments are closed.