astropy.nddata.block_reduce(data, block_size, func=<function sum>)[source]#

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.


The data to be resampled.

block_sizeint or array_like (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.

funccallable(), 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).


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


>>> 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]])