Omówienie ograniczeń

Reduktor to sposób na agregowanie danych w czasie, przestrzeni, pasmach, tablicach i innych strukturach danych w Earth Engine. Klasa ee.Reducer określa sposób agregowania danych. Reduktor w tej klasie może określić prostą statystykę do użycia do agregacji (np. minimum, maksimum, średnia, mediana, odchylenie standardowe itp.) lub bardziej złożone podsumowanie danych wejściowych (np. histogram, regresja liniowa, lista). Zmniejszenie może nastąpić w czasie (imageCollection.reduce()), przestrzeni (image.reduceRegion(), image.reduceNeighborhood()), pasmach (image.reduce()) lub przestrzeni atrybutów FeatureCollection (metody featureCollection.reduceColumns() lub FeatureCollection, które zaczynają się od aggregate_).

Reduktor ma wejścia i wyjścia

Funkcja redukcji przyjmuje zbiór danych wejściowych i tworzy pojedynczy wynik. Gdy pojedynczy reduktor danych wejściowych zostanie zastosowany do obrazu wielopasmowego, Earth Engine automatycznie powieli reduktor i zastosuje go osobno do każdego pasma. W rezultacie obraz wyjściowy ma taką samą liczbę pasm co obraz wejściowy. Każde pasmo na wyjściu to redukcja pikseli z odpowiedniego pasma w danych wejściowych. Niektóre reduktor przyjmują tuple zbiorów danych wejściowych. Te reduktor nie będą automatycznie replikowane w przypadku każdego pasma. Na przykład funkcja ee.Reducer.LinearRegression() przyjmuje w określonej kolejności (patrz Regresja reduktor) wiele zbiorów danych predyktorów (reprezentujących zmienne niezależne w regresji).

Niektóre reduktora wytwarzają wiele danych wyjściowych, np. ee.Reducer.minMax(), ee.Reducer.histogram() lub ee.Reducer.toList(). Na przykład:

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

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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

Spowoduje to wygenerowanie danych wyjściowych z dwukrotną liczbą pasm danych wejściowych, przy czym nazwy pasm w danych wyjściowych będą zawierać odpowiednio „_min” lub „_max”.

Typ danych wyjściowych powinien być zgodny z obliczeniami. Na przykład reduktor zastosowany do funkcji ImageCollection zwraca wartość Image. Wyjście jest interpretowane jako wartość w pikselach, dlatego do redukowania wartości ImageCollection musisz używać funkcji redukujących z wynikiem liczbowym (funkcje toList() lub histogram() nie będą działać).

Reduktor używa danych wejściowych ważonych

Domyślnie redukcje wartości pikseli są ważone według ich maski, ale to zachowanie można zmienić (patrz sekcja dotycząca ważenia). Podczas zmniejszania nie będą wykorzystywane piksele, dla których wartość maski jest równa 0.

Łączenie reduktora

Jeśli chcesz zastosować kilka reduktorów do tych samych danych wejściowych, zalecamy combine() reduktorów ze względu na ich wydajność. W szczególności wywołanie funkcji combine() w reducerze z ustawionym parametrem sharedInputs równym true spowoduje tylko jedno przejście po danych. Aby na przykład obliczyć średnią i odchylenie standardowe pikseli na obrazie, możesz użyć takiej formuły:

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

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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)

W wyniku zwróć uwagę, że nazwy reduktora zostały dołączone do nazw danych wejściowych, aby można było rozróżnić wyniki działania reduktora. Takie zachowanie dotyczy również danych wyjściowych w postaci obrazu, do których nazw pasm wyjściowych dodawana jest nazwa reduktora.

Jeśli łączysz reduktor z nieważonymi wejściami i z ważonymi wejściami, wszystkie ważone wejścia muszą znajdować się przed nieważonymi wejściami.