بررسی اجمالی کاهنده

کاهنده ها راهی برای جمع آوری داده ها در طول زمان، فضا، باندها، آرایه ها و سایر ساختارهای داده در 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() . به عنوان مثال:

ویرایشگر کد (جاوا اسکریپت)

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

راه اندازی پایتون

برای اطلاعات در مورد API پایتون و استفاده از 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() روی یک کاهنده با sharedInputs که روی true تنظیم شده باشد، تنها منجر به یک عبور از داده ها می شود. به عنوان مثال، برای محاسبه میانگین و انحراف استاندارد پیکسل ها در یک تصویر، می توانید از چیزی شبیه به زیر استفاده کنید:

ویرایشگر کد (جاوا اسکریپت)

// 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);

راه اندازی پایتون

برای اطلاعات در مورد API پایتون و استفاده از 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)

در خروجی توجه داشته باشید که نام کاهنده ها به نام ورودی ها اضافه شده است تا خروجی های کاهنده را متمایز کند. این رفتار برای خروجی های تصویر نیز اعمال می شود، که نام کاهش دهنده به نام باندهای خروجی اضافه می شود.

اگر کاهنده‌ها را با استفاده از ورودی‌های وزنی و کاهنده‌ها را با استفاده از ورودی‌های وزنی ترکیب می‌کنید، همه ورودی‌های وزن‌دار باید قبل از همه ورودی‌های بدون وزن باشند.