Skip to main content
`Ctrl`+`K`

# block_reduce

astropy.nddata.block_reduce(data, block_size, func=<function sum>)

  Downsample a data array by applying a function to local blocks.

  If `data` is not perfectly divisible by `block_size` along a given axis then the data will be trimmed (from the end) along that axis.

  Parameters:
    data numpy:array_like

      The data to be resampled.

    block_size `python:int` or numpy:array_like (`python:int`)

      The integer block size along each axis. If `block_size` is a scalar and `data` has more than one dimension, then `block_size` will be used for for every axis.

    func `python:callable()`, optional

      The method to use to downsample the data. Must be a callable that takes in a 4D `ndarray` (the 2D `ndarray` input into `block_reduce` gets reshaped as 4D) and has an `axis` keyword that accepts tuples. This function will be called with `axis=(2, 3)` and it should return a 2D array. The default is `sum`, which provides block summation (and conserves the data sum).

  Returns:
    output numpy:array_like

      The resampled data. Note the depending on the input `func`, the dtype of the output array may not match the input array.

  Examples

      >>> import numpy as np
      >>> from astropy.nddata import block_reduce
      >>> data = np.arange(16).reshape(4, 4)
      >>> block_reduce(data, 2)
      array([[10, 18],
             [42, 50]])

      >>> block_reduce(data, 2, func=np.mean)
      array([[  2.5,   4.5],
             [ 10.5,  12.5]])