Array di Earth Engine dibuat dari daftar angka dan daftar daftar. Tingkat
tingkatan menentukan jumlah dimensi. Untuk memulai dengan contoh sederhana
dan termotivasi, pertimbangkan contoh Array
berikut yang dibuat dari
koefisien tasseled cap (TC) Landsat 8
(Baig et al., 2014):
Editor Kode (JavaScript)
// Create an Array of Tasseled Cap coefficients. var coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ]);
import ee import geemap.core as geemap
Colab (Python)
# Create an Array of Tasseled Cap coefficients. coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ])
Pastikan ini adalah Array 2D 6x6 menggunakan length()
, yang akan menampilkan
panjang setiap sumbu:
Editor Kode (JavaScript)
// Print the dimensions. print(coefficients.length()); // [6,6]
import ee import geemap.core as geemap
Colab (Python)
# Print the dimensions. display(coefficients.length()) # [6,6]
Tabel berikut mengilustrasikan pengaturan entri matriks di sepanjang sumbu 0 dan sumbu 1:
1 sumbu -> | |||||||
---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | ||
0 | 0,3029 | 0,2786 | 0,4733 | 0,5599 | 0,508 | 0,1872 | |
1 | -0,2941 | -0,243 | -0,5424 | 0,7276 | 0,0713 | -0,1608 | |
Sumbu 0 | 2 | 0,1511 | 0,1973 | 0,3283 | 0,3407 | -0,7117 | -0,4559 |
3 | -0,8239 | 0,0849 | 0,4396 | -0,058 | 0,2013 | -0,2773 | |
4 | -0,3294 | 0,0557 | 0,1056 | 0,1855 | -0,4349 | 0,8085 | |
5 | 0,1079 | -0,9023 | 0,4119 | 0,0575 | -0,0259 | 0,0252 |
Indeks di sebelah kiri tabel menunjukkan posisi di sepanjang sumbu 0. Elemen ke-n
dalam setiap daftar pada sumbu 0 berada di posisi ke-n di sepanjang sumbu 1. Misalnya,
entri pada koordinat [3,1] array adalah 0,0849. Misalkan 'kehijauan' adalah
komponen TC yang diminati. Anda bisa mendapatkan sub-matriks kehijauan menggunakan slice()
:
Editor Kode (JavaScript)
// Get the 1x6 greenness slice, display it. var greenness = coefficients.slice({axis: 0, start: 1, end: 2, step: 1}); print(greenness);
import ee import geemap.core as geemap
Colab (Python)
# Get the 1x6 greenness slice, display it. greenness = coefficients.slice(axis=0, start=1, end=2, step=1) display(greenness)
Matriks kehijauan 2D akan terlihat seperti ini:
[[-0.2941,-0.243,-0.5424,0.7276,0.0713,-0.1608]]
Perhatikan bahwa parameter start
dan end
dari slice()
sesuai dengan indeks sumbu 0 yang ditampilkan dalam tabel (start
bersifat inklusif
dan end
bersifat eksklusif).
Gambar Array
Untuk mendapatkan gambar kehijauan, kalikan matriks band gambar Landsat 8 dengan matriks kehijauan. Untuk melakukannya, pertama-tama konversikan gambar Landsat multi-band menjadi
“Gambar Array”, dengan setiap piksel adalah Array
nilai band. Contoh:
Editor Kode (JavaScript)
// Load a Landsat 8 image, select the bands of interest. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B2', 'B3', 'B4', 'B5', 'B6', 'B7']); // Make an Array Image, with a 1-D Array per pixel. var arrayImage1D = image.toArray(); // Make an Array Image with a 2-D Array per pixel, 6x1. var arrayImage2D = arrayImage1D.toArray(1);
import ee import geemap.core as geemap
Colab (Python)
# Load a Landsat 8 image, select the bands of interest. image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select( ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'] ) # Make an Array Image, with a 1-D Array per pixel. array_image_1d = image.toArray() # Make an Array Image with a 2-D Array per pixel, 6x1. array_image_2d = array_image_1d.toArray(1)
Dalam contoh ini, perhatikan bahwa toArray()
mengonversi image
menjadi
gambar array yang setiap pikselnya adalah vektor 1-D, entrinya sesuai dengan
6 nilai pada posisi yang sesuai dalam band image
. Gambar array vektor 1-D yang dibuat dengan cara ini tidak memiliki konsep bentuk 2-D. Untuk melakukan operasi khusus
2-D seperti perkalian matriks, konversikan menjadi gambar array 2-D per piksel
dengan toArray(1)
. Di setiap piksel gambar array 2D, terdapat matriks nilai band 6x1. Untuk melihatnya, pertimbangkan contoh mainan berikut:
Editor Kode (JavaScript)
var array1D = ee.Array([1, 2, 3]); // [1,2,3] var array2D = ee.Array.cat([array1D], 1); // [[1],[2],[3]]
import ee import geemap.core as geemap
Colab (Python)
array_1d = ee.Array([1, 2, 3]) # [1,2,3] array_2d = ee.Array.cat([array_1d], 1) # [[1],[2],[3]]
Perhatikan bahwa vektor array1D
bervariasi di sepanjang sumbu 0. Matriks
array2D
juga melakukannya, tetapi memiliki dimensi tambahan. Memanggil
toArray(1)
pada gambar array sama seperti memanggil cat(bandVector, 1)
pada setiap piksel. Menggunakan gambar array 2D, kalikan kiri dengan gambar yang setiap pikselnya
berisi matriks 2D koefisien kehijauan:
Editor Kode (JavaScript)
// Do a matrix multiplication: 1x6 times 6x1. // Cast the greenness Array to an Image prior to multiplication. var greennessArrayImage = ee.Image(greenness).matrixMultiply(arrayImage2D);
import ee import geemap.core as geemap
Colab (Python)
# Do a matrix multiplication: 1x6 times 6x1. # Cast the greenness Array to an Image prior to multiplication. greenness_array_image = ee.Image(greenness).matrixMultiply(array_image_2d)
Hasilnya adalah gambar array baru dengan setiap piksel adalah matriks 1x1 yang dihasilkan dari
matriks yang mengalikan matriks kehijauan 1x6 (kiri) dan matriks band 6x1 (kanan). Untuk
tujuan tampilan, konversi ke gambar satu band reguler dengan arrayGet()
:
Editor Kode (JavaScript)
// Get the result from the 1x1 array in each pixel of the 2-D array image. var greennessImage = greennessArrayImage.arrayGet([0, 0]); // Display the input imagery with the greenness result. Map.setCenter(-122.3, 37.562, 10); Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], min: 0, max: 0.5}, 'image'); Map.addLayer(greennessImage, {min: -0.1, max: 0.13}, 'greenness');
import ee import geemap.core as geemap
Colab (Python)
# Get the result from the 1x1 array in each pixel of the 2-D array image. greenness_image = greenness_array_image.arrayGet([0, 0]) # Display the input imagery with the greenness result. m = geemap.Map() m.set_center(-122.3, 37.562, 10) m.add_layer(image, {'bands': ['B5', 'B4', 'B3'], 'min': 0, 'max': 0.5}, 'image') m.add_layer(greenness_image, {'min': -0.1, 'max': 0.13}, 'greenness') m
Berikut adalah contoh lengkap, yang menggunakan seluruh array koefisien untuk menghitung beberapa komponen tasseled cap sekaligus dan menampilkan hasilnya:
Editor Kode (JavaScript)
// Define an Array of Tasseled Cap coefficients. var coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ]); // Load a Landsat 8 image, select the bands of interest. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B2', 'B3', 'B4', 'B5', 'B6', 'B7']); // Make an Array Image, with a 1-D Array per pixel. var arrayImage1D = image.toArray(); // Make an Array Image with a 2-D Array per pixel, 6x1. var arrayImage2D = arrayImage1D.toArray(1); // Do a matrix multiplication: 6x6 times 6x1. var componentsImage = ee.Image(coefficients) .matrixMultiply(arrayImage2D) // Get rid of the extra dimensions. .arrayProject([0]) .arrayFlatten( [['brightness', 'greenness', 'wetness', 'fourth', 'fifth', 'sixth']]); // Display the first three bands of the result and the input imagery. var vizParams = { bands: ['brightness', 'greenness', 'wetness'], min: -0.1, max: [0.5, 0.1, 0.1] }; Map.setCenter(-122.3, 37.562, 10); Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], min: 0, max: 0.5}, 'image'); Map.addLayer(componentsImage, vizParams, 'components');
import ee import geemap.core as geemap
Colab (Python)
# Define an Array of Tasseled Cap coefficients. coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ]) # Load a Landsat 8 image, select the bands of interest. image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select( ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'] ) # Make an Array Image, with a 1-D Array per pixel. array_image_1d = image.toArray() # Make an Array Image with a 2-D Array per pixel, 6x1. array_image_2d = array_image_1d.toArray(1) # Do a matrix multiplication: 6x6 times 6x1. components_image = ( ee.Image(coefficients) .matrixMultiply(array_image_2d) # Get rid of the extra dimensions. .arrayProject([0]) .arrayFlatten( [['brightness', 'greenness', 'wetness', 'fourth', 'fifth', 'sixth']] ) ) # Display the first three bands of the result and the input imagery. viz_params = { 'bands': ['brightness', 'greenness', 'wetness'], 'min': -0.1, 'max': [0.5, 0.1, 0.1], } m = geemap.Map() m.set_center(-122.3, 37.562, 10) m.add_layer(image, {'bands': ['B5', 'B4', 'B3'], 'min': 0, 'max': 0.5}, 'image') m.add_layer(components_image, viz_params, 'components') m
Perhatikan bahwa saat mendapatkan band dari gambar array, hapus dimensi tambahan terlebih dahulu
dengan project()
, lalu konversikan kembali ke gambar biasa dengan
arrayFlatten()
. Outputnya akan terlihat seperti ini:
