レデューサの概要

リジューダは、時間、空間、バンド、配列などのデータ構造にわたってデータを集計する方法です。ee.Reducer クラスは、データの集計方法を指定します。このクラスの Reducer では、集計に使用する単純な統計情報(最小値、最大値、平均値、中央値、標準偏差など)や、入力データのより複雑なサマリー(ヒストグラム、線形回帰、リストなど)を指定できます。削減は、時間(imageCollection.reduce())、空間(image.reduceRegion()image.reduceNeighborhood())、バンド(image.reduce())、または FeatureCollection の属性空間(featureCollection.reduceColumns() または FeatureCollection メソッドで、aggregate_ で始まるメソッド)で発生する可能性があります。

リジューサーには入力と出力があります

レジューサーは入力データセットを受け取り、単一の出力を生成します。単一の入力 Reducer がマルチバンド画像に適用されると、Earth Engine は Reducer を自動的に複製し、各バンドに個別に適用します。その結果、出力画像のバンド数は入力画像と同じになります。出力の各バンドは、入力データの対応するバンドからピクセルが削減されたものです。一部の reducer は、入力データセットの Tuple を受け取ります。これらのレジューサーは、バンドごとに自動的に複製されません。たとえば、ee.Reducer.LinearRegression() は、特定の順序で複数の予測子データセット(回帰の独立変数を表す)を取ります(回帰リデューサーをご覧ください)。

一部の Reducer は、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 とインタラクティブな開発で geemap を使用する方法については、 Python 環境のページをご覧ください。

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

これにより、入力のバンド数の 2 倍の出力が生成されます。出力のバンド名には、バンド名に「_min」または「_max」が追加されます。

出力タイプは計算と一致している必要があります。たとえば、ImageCollection に適用されるリデューサーには Image 出力があります。出力はピクセル値として解釈されるため、ImageCollection を減算するには、数値出力を持つリデューサを使用する必要があります(toList()histogram() などのリデューサは機能しません)。

レジューサーは重み付き入力を使用します

デフォルトでは、ピクセル値の減衰はマスクによって重み付けされますが、この動作は変更できます(重み付けのセクションをご覧ください)。マスクが 0 のピクセルは、圧縮に使用されません。

リデューサーの組み合わせ

複数の Reducer を同じ入力に適用する場合は、効率性を高めるために Reducer を combine() することをおすすめします。具体的には、sharedInputstrue に設定されたレジューダで combine() を呼び出すと、データに 1 回だけパスが実行されます。たとえば、画像内のピクセルの平均と標準偏差を計算するには、次のようなコードを使用します。

コードエディタ(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 とインタラクティブな開発で geemap を使用する方法については、 Python 環境のページをご覧ください。

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)

出力では、レジューサーの出力を区別するために、レジューサーの名前が入力の名前に追加されています。この動作はイメージ出力にも適用されます。出力バンド名には、レジューサーの名前が追加されます。

重み付けなしの入力を使用するリデューサーと重み付け付きの入力を使用するリデューサーを組み合わせる場合は、すべての重み付け付き入力がすべての重み付けなしの入力の前に配置されている必要があります。