Обзор редуктора

Редукторы — это способ агрегирования данных во времени, пространстве, диапазонах, массивах и других структурах данных в Earth Engine. Класс ee.Reducer определяет, как агрегируются данные. Редьюсеры в этом классе могут указывать простую статистику, используемую для агрегирования (например, минимум, максимум, среднее значение, медиана, стандартное отклонение и т. д.), или более сложную сводку входных данных (например, гистограмму, линейную регрессию, список). Сокращение может происходить во времени ( imageCollection.reduce() ), пространстве ( image.reduceRegion() , image.reduceNeighborhood() ), полосах ( image.reduce() ) или пространстве атрибутов FeatureCollection ( методы featureCollection.reduceColumns() или FeatureCollection , начинающиеся aggregate_ ).

Редукторы имеют входы и выходы.

Редюсеры принимают входной набор данных и выдают один результат. Когда к многоканальному изображению применяется один входной редуктор, Earth Engine автоматически копирует редуктор и применяет его отдельно к каждому каналу. В результате выходное изображение имеет то же количество полос, что и входное изображение; каждая полоса на выходе представляет собой уменьшение пикселей из соответствующей полосы во входных данных. Некоторые редукторы принимают кортежи входных наборов данных. Эти редукторы не будут автоматически реплицироваться для каждой полосы. Например, ee.Reducer.LinearRegression() принимает несколько наборов данных предикторов (представляющих независимые переменные в регрессии) в определенном порядке (см. Редукторы регрессии ).

Некоторые редукторы выдают несколько выходных данных, например ee.Reducer.minMax() , ee.Reducer.histogram() или ee.Reducer.toList() . Например:

Редактор кода (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

См. страницу «Среда Python» для получения информации об API Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

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

Это приведет к тому, что на выходе будет удвоенное количество полос по сравнению с входными, где к именам полос на выходе будет добавлено «_min» или «_max».

Тип вывода должен соответствовать вычислению. Например, редуктор, примененный к ImageCollection имеет вывод Image . Поскольку выходные данные интерпретируются как значение пикселя, вы должны использовать редукторы с числовым выводом, чтобы уменьшить ImageCollection (редьюсеры, такие как toList() или histogram() не будут работать).

Редукторы используют взвешенные входы

По умолчанию уменьшения значений пикселей взвешиваются по их маске, однако это поведение можно изменить (см. раздел «Взвешивание »). Пиксели с маской, равной 0, не будут использоваться при уменьшении.

Объединение редукторов

Если вы намерены применить несколько редукторов к одним и тем же входным данным, хорошей практикой является combine() редукторов для повышения эффективности. В частности, вызов combine() в редукторе с установленным значением true для sharedInputs приведет только к одному проходу по данным. Например, чтобы вычислить среднее и стандартное отклонение пикселей изображения, вы можете использовать что-то вроде этого:

Редактор кода (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

См. страницу «Среда Python» для получения информации об API Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

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

Обратите внимание, что в выводе имена редукторов были добавлены к именам входов, чтобы различать выходы редуктора. Это поведение также применимо к выходным изображениям, к именам выходных каналов которых будет добавлено имя редуктора.

Если вы комбинируете редукторы, использующие невзвешенные входные данные, и редукторы, использующие взвешенные входные данные, все взвешенные входные данные должны находиться перед всеми невзвешенными входными данными.