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
lookup = pd.DataFrame({'mukey':list(range(10)),'n':np.random.randn(10),'K':np.random.randn(10)*2}).set_index('mukey').to_xarray()
lookup
davy.ai
Para fusionar los dos conjuntos de datos basados en el índice ‘mukey’, xarray proporciona el método
merge()
, que se puede usar conon='mukey'
para fusionar en este índice. Aquí hay un ejemplo de código: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ámetrocompat
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ámetrocombine_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 matricesnumpy
para habilitar la computación paralela y la computación fuera de memoria.