labeled_comprehension — SciPy v1.15.2 Manual (original) (raw)
scipy.ndimage.
scipy.ndimage.labeled_comprehension(input, labels, index, func, out_dtype, default, pass_positions=False)[source]#
Roughly equivalent to [func(input[labels == i]) for i in index].
Sequentially applies an arbitrary function (that works on array_like input) to subsets of an N-D image array specified by labels and index. The option exists to provide the function with positional parameters as the second argument.
Parameters:
inputarray_like
Data from which to select labels to process.
labelsarray_like or None
Labels to objects in input. If not None, array must be same shape as input. If None, func is applied to raveled input.
indexint, sequence of ints or None
Subset of labels to which to apply func. If a scalar, a single value is returned. If None, func is applied to all non-zero values of labels.
funccallable
Python function to apply to labels from input.
out_dtypedtype
Dtype to use for result.
defaultint, float or None
Default return value when a element of index does not exist in labels.
pass_positionsbool, optional
If True, pass linear indices to func as a second argument. Default is False.
Returns:
resultndarray
Result of applying func to each of labels to input in index.
Examples
import numpy as np a = np.array([[1, 2, 0, 0], ... [5, 3, 0, 4], ... [0, 0, 0, 7], ... [9, 3, 0, 0]]) from scipy import ndimage lbl, nlbl = ndimage.label(a) lbls = np.arange(1, nlbl+1) ndimage.labeled_comprehension(a, lbl, lbls, np.mean, float, 0) array([ 2.75, 5.5 , 6. ])
Falling back to default:
lbls = np.arange(1, nlbl+2) ndimage.labeled_comprehension(a, lbl, lbls, np.mean, float, -1) array([ 2.75, 5.5 , 6. , -1. ])
Passing positions:
def fn(val, pos): ... print("fn says: %s : %s" % (val, pos)) ... return (val.sum()) if (pos.sum() % 2 == 0) else (-val.sum()) ... ndimage.labeled_comprehension(a, lbl, lbls, fn, float, 0, True) fn says: [1 2 5 3] : [0 1 4 5] fn says: [4 7] : [ 7 11] fn says: [9 3] : [12 13] array([ 11., 11., -12., 0.])