ตัวลดข้อมูลเป็นวิธีรวบรวมข้อมูลตามช่วงเวลา พื้นที่ แถบ อาร์เรย์ และโครงสร้างข้อมูลอื่นๆ ใน 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());
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 ในการลดขนาด
การรวมตัวลด
หากต้องการใช้ตัวลดหลายรายการกับอินพุตเดียวกัน คุณควรcombine()
ตัวลดเพื่อประสิทธิภาพ กล่าวโดยละเอียดคือ การเรียกใช้ combine()
ในรีดิวเซอร์ที่มีการตั้งค่า sharedInputs
เป็น true
จะส่งผลให้มีการเรียกใช้ข้อมูลเพียงครั้งเดียว เช่น หากต้องการคํานวณค่าเฉลี่ยและค่าเบี่ยงเบนมาตรฐานของพิกเซลในรูปภาพ คุณอาจใช้โค้ดประมาณนี้
เครื่องมือแก้ไขโค้ด (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)
ในเอาต์พุต โปรดทราบว่าระบบได้เพิ่มชื่อตัวลดขนาดต่อท้ายชื่ออินพุตเพื่อแยกเอาต์พุตของตัวลดขนาด ลักษณะการทำงานนี้มีผลกับเอาต์พุตรูปภาพด้วย ซึ่งจะมีชื่อของตัวลดต่อท้ายชื่อแบนด์เอาต์พุต
หากคุณกำลังรวมตัวลดที่ใช้อินพุตที่ไม่มีน้ำหนักเข้ากับตัวลดที่ใช้อินพุตที่มีน้ำหนัก อินพุตที่มีน้ำหนักทั้งหมดต้องอยู่ก่อนอินพุตที่ไม่มีน้ำหนักทั้งหมด