Reducer के बारे में खास जानकारी

रिड्यूसर, 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 के बारे में जानकारी पाने और इंटरैक्टिव डेवलपमेंट के लिए 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())

इससे, इनपुट के बैंड की संख्या से दोगुना बैंड वाला आउटपुट मिलेगा. इसमें, आउटपुट में बैंड के नाम के साथ '_min' या '_max' जोड़ा जाएगा.

आउटपुट टाइप, कैलकुलेशन से मेल खाना चाहिए. उदाहरण के लिए, किसी ImageCollection पर लागू किए गए रिड्यूसर का आउटपुट Image होता है. आउटपुट को पिक्सल वैल्यू के तौर पर समझा जाता है. इसलिए, ImageCollection को कम करने के लिए, आपको संख्या वाले आउटपुट के साथ रिड्यूसर का इस्तेमाल करना होगा. toList() या histogram() जैसे रिड्यूसर काम नहीं करेंगे.

रिड्यूसर, अहमियत वाले इनपुट का इस्तेमाल करते हैं

डिफ़ॉल्ट रूप से, पिक्सल वैल्यू में हुई कमी को उनके मास्क के हिसाब से तय किया जाता है. हालांकि, इस व्यवहार को बदला जा सकता है. इसके लिए, वज़न तय करने वाला सेक्शन देखें. जिन पिक्सल का मास्क 0 के बराबर है उनका इस्तेमाल, रिडक्शन में नहीं किया जाएगा.

रीड्यूसर को आपस में जोड़ना

अगर आपको एक ही इनपुट पर कई रिड्यूसर लागू करने हैं, तो बेहतर परफ़ॉर्मेंस के लिए, रिड्यूसर को combine() करना अच्छा होता है. खास तौर पर, sharedInputs को true पर सेट करके, किसी रिड्यूसर पर combine() को कॉल करने पर, डेटा पर सिर्फ़ एक बार पास होगा. उदाहरण के लिए, किसी इमेज में पिक्सल का मतलब और स्टैंडर्ड डिविएशन का हिसाब लगाने के लिए, कुछ ऐसा इस्तेमाल किया जा सकता है:

कोड एडिटर (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)

आउटपुट में, ध्यान दें कि रिड्यूसर के आउटपुट को अलग करने के लिए, रिड्यूसर के नाम को इनपुट के नामों के साथ जोड़ दिया गया है. यह व्यवहार, इमेज आउटपुट पर भी लागू होता है. इनमें, आउटपुट बैंड के नामों के साथ रिड्यूसर का नाम जोड़ा जाएगा.

अगर बिना वेट वाले इनपुट और वेट वाले इनपुट का इस्तेमाल करके, रिड्यूसर को जोड़ा जा रहा है, तो सभी वेट वाले इनपुट, बिना वेट वाले इनपुट से पहले होने चाहिए.