Los reductores son la forma de agregar datos a lo largo del tiempo, el espacio, las bandas, los arrays y otras estructuras de datos en Earth Engine. La clase ee.Reducer
especifica cómo se agregan los datos. Los reductores de esta clase pueden especificar una estadística simple para usar en la agregación (p.ej., mínimo, máximo, promedio, mediana, desviación estándar, etc.) o un resumen más complejo de los datos de entrada (p.ej., histograma, regresión lineal, lista). Las reducciones pueden ocurrir a lo largo del tiempo (imageCollection.reduce()
), en el espacio (image.reduceRegion()
, image.reduceNeighborhood()
), en las bandas (image.reduce()
) o en el espacio de atributos de un FeatureCollection
(featureCollection.reduceColumns()
o métodos FeatureCollection
que comienzan con aggregate_
).
Los reductores tienen entradas y salidas.
Los reductores toman un conjunto de datos de entrada y producen un solo resultado. Cuando se aplica un solo reductor de entrada a una imagen multibanda, Earth Engine replica automáticamente el reductor y lo aplica por separado a cada banda. Como resultado, la imagen de salida tiene la misma cantidad de bandas que la imagen de entrada. Cada banda en la salida es la reducción de píxeles de la banda correspondiente en los datos de entrada. Algunos reductores toman tuplas de conjuntos de datos de entrada. Estos reductores no se replicarán automáticamente para cada banda. Por ejemplo, ee.Reducer.LinearRegression()
toma varios conjuntos de datos de predictores (que representan variables independientes en la regresión) en un orden particular (consulta Reductores de regresión).
Algunos reductores producen varias salidas, por ejemplo, ee.Reducer.minMax()
, ee.Reducer.histogram()
o ee.Reducer.toList()
. Por ejemplo:
// Load and filter the Sentinel-2 image collection. var collection = ee.ImageCollection('COPERNICUS/S2_HARMONIZED') .filterDate('2016-01-01', '2016-12-31') .filterBounds(ee.Geometry.Point([-81.31, 29.90])); // Reduce the collection. var extrema = collection.reduce(ee.Reducer.minMax());
import ee import geemap.core as geemap
# Load and filter the Sentinel-2 image collection. collection = ( ee.ImageCollection('COPERNICUS/S2_HARMONIZED') .filterDate('2016-01-01', '2016-12-31') .filterBounds(ee.Geometry.Point([-81.31, 29.90])) ) # Reduce the collection. extrema = collection.reduce(ee.Reducer.minMax())
Esto producirá un resultado con el doble de la cantidad de bandas de las entradas, en las que los nombres de las bandas en el resultado tienen "_min" o "_max" agregados al nombre de la banda.
El tipo de salida debe coincidir con el cálculo. Por ejemplo, un reductor aplicado a un ImageCollection
tiene un resultado Image
. Debido a que el resultado se interpreta como un valor de píxeles, debes usar reductores con un resultado numérico para reducir un ImageCollection
(los reductores como toList()
o histogram()
no funcionarán).
Los reductores usan entradas ponderadas
De forma predeterminada, las reducciones sobre los valores de píxeles se ponderan según su máscara, aunque este comportamiento se puede cambiar (consulta la sección Ponderación). Los píxeles con una máscara igual a 0 no se usarán en la reducción.
Combinación de reductoras
Si tu intención es aplicar varios reductores a las mismas entradas, se recomienda
combine()
los reductores para mejorar la eficiencia. Específicamente, llamar a combine()
en un reductor con sharedInputs
establecido en true
solo generará un solo pase por los datos. Por ejemplo, para calcular la media y la desviación estándar de los píxeles en una imagen, puedes usar algo como lo siguiente:
// Load a Landsat 8 image. var image = ee.Image('LANDSAT/LC08/C02/T1/LC08_044034_20140318'); // Combine the mean and standard deviation reducers. var reducers = ee.Reducer.mean().combine({ reducer2: ee.Reducer.stdDev(), sharedInputs: true }); // Use the combined reducer to get the mean and SD of the image. var stats = image.reduceRegion({ reducer: reducers, bestEffort: true, }); // Display the dictionary of band means and SDs. print(stats);
import ee import geemap.core as geemap
# Load a Landsat 8 image. image = ee.Image('LANDSAT/LC08/C02/T1/LC08_044034_20140318') # Combine the mean and standard deviation reducers. reducers = ee.Reducer.mean().combine( reducer2=ee.Reducer.stdDev(), sharedInputs=True ) # Use the combined reducer to get the mean and SD of the image. stats = image.reduceRegion(reducer=reducers, bestEffort=True) # Display the dictionary of band means and SDs. display(stats)
En el resultado, observa que los nombres de los reductores se agregaron a los nombres de las entradas para distinguir los resultados del reductor. Este comportamiento también se aplica a los resultados de imagen, que tendrán el nombre del reductor agregado a los nombres de las bandas de salida.
Si combinas reductoras que usan entradas no ponderadas y reductoras que usan entradas ponderadas, todas las entradas ponderadas deben estar antes de todas las entradas no ponderadas.