Les réducteurs permettent d'agréger des données sur la durée, l'espace, les bandes, les tableaux et d'autres structures de données dans Earth Engine. La classe ee.Reducer
spécifie comment les données sont agrégées. Les réducteurs de cette classe peuvent spécifier une statistique simple à utiliser pour l'agrégation (par exemple, minimum, maximum, moyenne, médiane, écart-type, etc.) ou un résumé plus complexe des données d'entrée (par exemple, histogramme, régression linéaire, liste). Les réductions peuvent se produire au fil du temps (imageCollection.reduce()
), dans l'espace (image.reduceRegion()
, image.reduceNeighborhood()
), dans les bandes (image.reduce()
) ou dans l'espace d'attributs d'un FeatureCollection
(méthodes featureCollection.reduceColumns()
ou FeatureCollection
commençant par aggregate_
).
Les réducteurs ont des entrées et des sorties
Les réducteurs prennent un ensemble de données d'entrée et produisent une seule sortie. Lorsqu'un seul réducteur d'entrée est appliqué à une image multibande, Earth Engine réplique automatiquement le réducteur et l'applique séparément à chaque bande. Par conséquent, l'image de sortie a le même nombre de bandes que l'image d'entrée. Chaque bande de la sortie correspond à la réduction des pixels de la bande correspondante dans les données d'entrée. Certains réducteurs acceptent des tupels d'ensembles de données d'entrée. Ces réducteurs ne seront pas automatiquement répliqués pour chaque bande. Par exemple, ee.Reducer.LinearRegression()
prend plusieurs ensembles de données de prédicteurs (représentant des variables indépendantes dans la régression) dans un ordre particulier (voir Réducteurs de régression).
Certains réducteurs produisent plusieurs sorties, par exemple ee.Reducer.minMax()
, ee.Reducer.histogram()
ou ee.Reducer.toList()
. Exemple :
Éditeur de code (JavaScript)
// 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
Colab (Python)
# 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())
Cela génère une sortie avec deux fois le nombre de bandes des entrées, où les noms de bandes dans la sortie sont suivis de "_min" ou "_max".
Le type de sortie doit correspondre au calcul. Par exemple, un réducteur appliqué à un ImageCollection
a une sortie Image
. Étant donné que la sortie est interprétée comme une valeur de pixel, vous devez utiliser des réducteurs avec une sortie numérique pour réduire un ImageCollection
(les réducteurs tels que toList()
ou histogram()
ne fonctionneront pas).
Les réducteurs utilisent des entrées pondérées
Par défaut, les réductions sur les valeurs de pixel sont pondérées par leur masque, mais ce comportement peut être modifié (voir la section "Pondération"). Les pixels dont le masque est égal à 0 ne seront pas utilisés lors de la réduction.
Combiner des réducteurs
Si vous souhaitez appliquer plusieurs réducteurs aux mêmes entrées, il est recommandé de combine()
les réducteurs pour plus d'efficacité. Plus précisément, l'appel de combine()
sur un réducteur avec sharedInputs
défini sur true
ne génère qu'une seule passe sur les données. Par exemple, pour calculer la moyenne et l'écart-type des pixels d'une image, vous pouvez utiliser quelque chose comme ceci:
Éditeur de code (JavaScript)
// 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
Colab (Python)
# 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)
Dans la sortie, notez que les noms des réducteurs ont été ajoutés aux noms des entrées pour distinguer les sorties des réducteurs. Ce comportement s'applique également aux sorties d'images, auxquelles le nom du réducteur sera ajouté aux noms des bandes de sortie.
Si vous combinez des réducteurs utilisant des entrées non pondérées et des réducteurs utilisant des entrées pondérées, toutes les entrées pondérées doivent être placées avant toutes les entrées non pondérées.