ee.Image.arrayReduce

Reduces elements of each array pixel.

UsageReturns
Image.arrayReduce(reducer, axes, fieldAxis)Image
ArgumentTypeDetails
this: inputImageInput image.
reducerReducerThe reducer to apply
axesListThe list of array axes to reduce in each pixel. The output will have a length of 1 in all these axes.
fieldAxisInteger, default: nullThe axis for the reducer's input and output fields. Only required if the reducer has multiple inputs or outputs.

Examples

Code Editor (JavaScript)

// A function to print arrays for a selected pixel in the following examples.
function sampArrImg(arrImg) {
  var point = ee.Geometry.Point([-121, 42]);
  return arrImg.sample(point, 500).first().get('array');
}

// Create a 1D array image with length 6.
var arrayImg1D = ee.Image([0, 1, 2, 3, 4, 5]).toArray();
print('1D array image (pixel)', sampArrImg(arrayImg1D));
// [0, 1, 2, 3, 4, 5]

// Sum the elements in the 1D array image.
var arrayImg1Dsum = arrayImg1D.arrayReduce(ee.Reducer.sum(), [0]);
print('1D array image sum (pixel)', sampArrImg(arrayImg1Dsum));
// [15]

// Create a 2D array image with 2 rows and 3 columns.
var arrayImg2D = arrayImg1D.arrayReshape(ee.Image([2, 3]).toArray(), 2);
print('2D array image (pixel)', sampArrImg(arrayImg2D));
// [[0, 1, 2],
//  [3, 4, 5]]

// Sum 2D array image along 0-axis.
var arrayImg2DsumRow = arrayImg2D.arrayReduce(ee.Reducer.sum(), [0]);
print('2D array image sum rows (pixel)', sampArrImg(arrayImg2DsumRow));
// [[3, 5, 7]]

// Sum 2D array image along 1-axis.
var arrayImg2DsumCol = arrayImg2D.arrayReduce(ee.Reducer.sum(), [1]);
print('2D array image sum columns (pixel)', sampArrImg(arrayImg2DsumCol));
// [[3],
//  [12]]

// Sum 2D array image 0-axis and 1-axis.
var arrayImg2DsumRowCol = arrayImg2D.arrayReduce(ee.Reducer.sum(), [0, 1]);
print('2D array image sum columns (pixel)', sampArrImg(arrayImg2DsumRowCol));
// [[15]]

// For reducers that provide several outputs (like minMax and percentile),
// you need to ensure you have a dimension to hold the results. For instance,
// if you want minMax for a 1D array, add a second dimension.
var arrayImg1Dto2D = arrayImg1D.toArray(1);
print('1D array image to 2D', sampArrImg(arrayImg1Dto2D));
// [[0],
//  [1],
//  [2],
//  [3],
//  [4],
//  [5]]

// Calculate min and max for 2D array, use the fieldAxis parameter.
var minMax1D = arrayImg1Dto2D.arrayReduce(ee.Reducer.minMax(), [0], 1);
print('1D array image minMax (pixel)', sampArrImg(minMax1D));
// [[0, 5]]

// If your array image is 2D and you want min and max, add a third dimension.
var arrayImg2Dto3D = arrayImg2D.toArray(2);
print('2D array image to 3D', sampArrImg(arrayImg2Dto3D));
// [[[0], [1], [2]],
//  [[3], [4], [5]]]

// Calculate min and max along the 0-axis, store results in 2-axis.
var minMax2D = arrayImg2Dto3D.arrayReduce(ee.Reducer.minMax(), [0], 2);
print('2D array image minMax (pixel)', sampArrImg(minMax2D));
// [[[0, 3],
//   [1, 4],
//   [2, 5]]]

Python setup

See the Python Environment page for information on the Python API and using geemap for interactive development.

import ee
import geemap.core as geemap

Colab (Python)

# A function to print arrays for a selected pixel in the following examples.
def samp_arr_img(arr_img):
  point = ee.Geometry.Point([-121, 42])
  return arr_img.sample(point, 500).first().get('array')

# Create a 1D array image with length 6.
array_img_1d = ee.Image([0, 1, 2, 3, 4, 5]).toArray()
print('1D array image (pixel):', samp_arr_img(array_img_1d).getInfo())
# [0, 1, 2, 3, 4, 5]

# Sum the elements in the 1D array image.
array_img_1d_sum = array_img_1d.arrayReduce(ee.Reducer.sum(), [0])
print('1D array image sum (pixel):', samp_arr_img(array_img_1d_sum).getInfo())
# [15]

# Create a 2D array image with 2 rows and 3 columns.
array_img_2d = array_img_1d.arrayReshape(ee.Image([2, 3]).toArray(), 2)
print('2D array image (pixel):', samp_arr_img(array_img_2d).getInfo())
# [[0, 1, 2],
#  [3, 4, 5]]

# Sum 2D array image along 0-axis.
array_img_2d_sum_row = array_img_2d.arrayReduce(ee.Reducer.sum(), [0])
print(
    '2D array image sum rows (pixel):',
    samp_arr_img(array_img_2d_sum_row).getInfo()
)
# [[3, 5, 7]]

# Sum 2D array image along 1-axis.
array_img_2d_sum_col = array_img_2d.arrayReduce(ee.Reducer.sum(), [1])
print(
    '2D array image sum columns (pixel):',
    samp_arr_img(array_img_2d_sum_col).getInfo()
)
# [[3],
#  [12]]

# Sum 2D array image 0-axis and 1-axis.
array_img_2d_sum_row_col = array_img_2d.arrayReduce(ee.Reducer.sum(), [0, 1])
print(
    '2D array image sum columns (pixel):',
    samp_arr_img(array_img_2d_sum_row_col).getInfo()
)
# [[15]]

# For reducers that provide several outputs (like minMax and percentile),
# you need to ensure you have a dimension to hold the results. For instance,
# if you want minMax for a 1D array, add a second dimension.
array_img_1d_to_2d = array_img_1d.toArray(1)
print('1D array image to 2D:', samp_arr_img(array_img_1d_to_2d).getInfo())
# [[0],
#  [1],
#  [2],
#  [3],
#  [4],
#  [5]]

# Calculate min and max for 2D array, use the fieldAxis parameter.
min_max_1d = array_img_1d_to_2d.arrayReduce(ee.Reducer.minMax(), [0], 1)
print('1D array image minMax (pixel):', samp_arr_img(min_max_1d).getInfo())
# [[0, 5]]

# If your array image is 2D and you want min and max, add a third dimension.
array_img_2d_to_3d = array_img_2d.toArray(2)
print('2D array image to 3D:', samp_arr_img(array_img_2d_to_3d).getInfo())
# [[[0], [1], [2]],
#  [[3], [4], [5]]]

# Calculate min and max along the 0-axis, store results in 2-axis.
min_max_2d = array_img_2d_to_3d.arrayReduce(ee.Reducer.minMax(), [0], 2)
print('2D array image minMax (pixel):', samp_arr_img(min_max_2d).getInfo())
# [[[0, 3],
#   [1, 4],
#   [2, 5]]]