Reducer – Übersicht

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());

Python einrichten

Auf der Seite Python-Umgebung finden Sie Informationen zur Python API und zur Verwendung von geemap für die interaktive Entwicklung.

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);

Python einrichten

Auf der Seite Python-Umgebung finden Sie Informationen zur Python API und zur Verwendung von geemap für die interaktive Entwicklung.

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.