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