binning¶
- odl.util.numerics.binning(arr, bin_size, reduction=<function sum>)[source]¶
Bin an array by a factor.
- Parameters:
- arr
array-like
The array that should be binned.
- bin_sizepositive int or sequence
Size or per-axis sizes of the bins.
- reduction: callable, optional
Function used to perform the binning by reduction over temporary axes of size
bin_size
. It is called asreduction(reshaped_arr, axis=reduction_axes)
hence it must support this signature. The function is expected to collapse
reduction_axes
.Default:
numpy.sum
- arr
- Returns:
- binned_arrnumpy.ndarray
Array of shape
n[i] // b[i]
in axisi
, wheren
refers to the original shape andb
to the bin sizes.
Examples
Binning by the same factor in all axes can be done with an integer
bin_size
:>>> arr = np.arange(24).reshape((4, 6)) >>> arr array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]]) >>> binning(arr, bin_size=2) array([[14, 22, 30], [62, 70, 78]])
If a sequence is given, the bin sizes are specific for each axis:
>>> binning(arr, bin_size=(2, 3)) array([[ 24, 42], [ 96, 114]])
Instead of the default
numpy.sum
, other functions that accept an array as first argument and anaxis
keyword argument can be used for reduction. For instance,numpy.max
, resulting in "max pooling":>>> binning(arr, bin_size=2, reduction=np.max) array([[ 7, 9, 11], [19, 21, 23]])