I riduttori consentono di aggregare i dati nel tempo, nello spazio, nelle bande, negli array e in altre strutture di dati in Earth Engine. La classe ee.Reducer
specifica la modalità di aggregazione dei dati. I riduttori di questa classe possono specificare una statistica semplice da utilizzare per l'aggregazione (ad es. minimo, massimo, media, mediana, deviazione standard e così via) o un riepilogo più complesso dei dati di input (ad es. istogramma, regressione lineare, elenco). Le riduzioni possono verificarsi nel tempo (imageCollection.reduce()
), nello spazio (image.reduceRegion()
,image.reduceNeighborhood()
), nelle bande (image.reduce()
) o nello spazio degli attributi di un FeatureCollection
(metodi featureCollection.reduceColumns()
o FeatureCollection
che iniziano con aggregate_
).
I riduttori hanno input e output
I riduttori prendono un set di dati di input e producono un singolo output. Quando un singolo riduttore di input viene applicato a un'immagine multibanda, Earth Engine lo replica automaticamente e lo applica separatamente a ogni banda. Di conseguenza, l'immagine di output ha lo stesso numero di bande dell'immagine di input. Ogni banda in output è la riduzione dei pixel della banda corrispondente nei dati di input. Alcuni riduttori accettano tuple di set di dati di input. Questi riduttori non verranno
replicati automaticamente per ogni fascia. Ad esempio,
ee.Reducer.LinearRegression()
prende più set di dati di previsione (che rappresentano
le variabili indipendenti nella regressione) in un determinato ordine (vedi
Riduttore di regressione).
Alcuni riduttori producono più output, ad esempio ee.Reducer.minMax()
,
ee.Reducer.histogram()
o ee.Reducer.toList()
. Ad esempio:
Editor di codice (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())
Verrà prodotto un output con il doppio del numero di bande degli input, in cui i nomi delle bande nell'output hanno "_min" o "_max" aggiunti al nome della banda.
Il tipo di output deve corrispondere al calcolo. Ad esempio, un riduttore applicato a un
ImageCollection
ha un output Image
. Poiché l'output viene interpretato come valore in pixel, devi utilizzare riduttori con un output numerico per ridurre un valore ImageCollection
(i riduttori come toList()
o histogram()
non funzioneranno).
I riduttori utilizzano input ponderati
Per impostazione predefinita, le riduzioni dei valori dei pixel vengono ponderate in base alla maschera, anche se questo comportamento può essere modificato (consulta la sezione Ponderazione). I pixel con maschera uguale a 0 non verranno utilizzati nella riduzione.
Combinare i riduttori
Se vuoi applicare più riduttori agli stessi input, è buona prassi
combine()
i riduttori per l'efficienza. Nello specifico, l'utilizzo di
combine()
su un riduttore con sharedInputs
impostato su
true
comporterà un solo passaggio sui dati. Ad esempio, per calcolare la media e la deviazione standard dei pixel di un'immagine, puoi utilizzare un codice simile al seguente:
Editor di codice (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)
Nell'output, tieni presente che i nomi dei riduttori sono stati aggiunti ai nomi degli input per distinguere gli output dei riduttori. Questo comportamento si applica anche agli output delle immagini, ai quali verrà aggiunto il nome del riduttore ai nomi delle bande di output.
Se combini riduttori che utilizzano input non ponderati e riduttori che utilizzano input ponderati, tutti gli input ponderati devono precedere tutti gli input non ponderati.