Mit Reducern können Sie Daten in Earth Engine nach Zeit, Raum, Bändern, Arrays und anderen Datenstrukturen zusammenfassen. Die ee.Reducer
-Klasse gibt an, wie Daten aggregiert werden. Die Reduzierer in dieser Klasse können eine einfache Statistik für die Aggregation angeben (z. B. Minimum, Maximum, Mittelwert, Median, Standardabweichung) oder eine komplexere Zusammenfassung der Eingabedaten (z. B. Histogramm, lineare Regression, Liste). Reduktionen können zeitlich (imageCollection.reduce()
), räumlich (image.reduceRegion()
, image.reduceNeighborhood()
), nach Bändern (image.reduce()
) oder im Attributbereich einer FeatureCollection
(featureCollection.reduceColumns()
- oder FeatureCollection
-Methoden, die mit aggregate_
beginnen) erfolgen.
Reduzierer haben Eingaben und Ausgaben
Reduzierer verarbeiten einen Eingabedatensatz und geben eine einzelne Ausgabe aus. Wenn ein einzelner Eingabe-Reduzierer auf ein mehrbandiges Bild angewendet wird, repliziert Earth Engine den Reduzierer automatisch und wendet ihn separat auf jeden einzelnen Band an. Das Ausgabebild hat daher dieselbe Anzahl von Bändern wie das Eingabebild. Jeder Band in der Ausgabe ist die Reduzierung der Pixel aus dem entsprechenden Band in den Eingabedaten. Einige Reduzierer nehmen Tupel von Eingabedatensätzen an. Diese Reduzierer werden nicht automatisch für jede Band repliziert. Beispielsweise nimmt ee.Reducer.LinearRegression()
mehrere Prädiktor-Datasets (die unabhängige Variablen in der Regression darstellen) in einer bestimmten Reihenfolge an (siehe Regressionsreduzierungsmethoden).
Einige Reduzierer erzeugen mehrere Ausgaben, z. B. ee.Reducer.minMax()
, ee.Reducer.histogram()
oder ee.Reducer.toList()
. Beispiel:
Code-Editor (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())
Dies führt zu einer Ausgabe mit doppelt so vielen Bändern wie die Eingaben, wobei den Bandnamen in der Ausgabe „_min“ oder „_max“ angehängt wird.
Der Ausgabetyp muss mit der Berechnung übereinstimmen. Ein ImageCollection
mit einem Reduzierer hat beispielsweise eine Image
-Ausgabe. Da die Ausgabe als Pixelwert interpretiert wird, müssen Sie Reducer mit einer numerischen Ausgabe verwenden, um einen ImageCollection
zu reduzieren. Reducer wie toList()
oder histogram()
funktionieren nicht.
Reduzierer verwenden gewichtete Eingaben
Standardmäßig werden Reduktionen über Pixelwerte anhand ihrer Maske gewichtet. Dieses Verhalten kann jedoch geändert werden (siehe Abschnitt zum Gewichten). Pixel mit einer Maske von 0 werden bei der Reduktion nicht verwendet.
Reduzierer kombinieren
Wenn Sie mehrere Reduzierer auf dieselben Eingaben anwenden möchten, empfiehlt es sich, die Reduzierer aus Effizienzgründen zu combine()
. Wenn Sie combine()
auf einen Reducer mit sharedInputs
= true
anwenden, werden die Daten nur einmal durchgegangen. So können Sie beispielsweise den Mittelwert und die Standardabweichung der Pixel in einem Bild berechnen:
Code-Editor (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)
In der Ausgabe sehen Sie, dass die Namen der Reduzierer an die Namen der Eingaben angehängt wurden, um die Reduziererausgaben zu unterscheiden. Dies gilt auch für Bildausgaben, bei denen der Name des Reducers an die Namen der Ausgabebänder angehängt wird.
Wenn Sie Reduzierer mit ungewogenen Eingaben und Reduzierer mit gewichteten Eingaben kombinieren, müssen alle gewichteten Eingaben vor allen ungewogenen Eingaben stehen.