Skip to main content
`Ctrl`+`K`
scipy.ndimage.

# labeled_comprehension

scipy.ndimage.labeled_comprehension(input, labels, index, func, out_dtype, default, pass_positions=False)

  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:
    input array_like

      Data from which to select labels to process.

    labels array_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.

    index int, 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.

    func callable

      Python function to apply to labels from input.

    out_dtype dtype

      Dtype to use for result.

    default int, float or None

      Default return value when an element of index does not exist in labels.

    pass_positions bool, optional

      If True, pass linear indices to func as a second argument. Default is False.

  Returns:
    result ndarray

      Result of applying func to each of labels to input in index.

  Notes

  Array API Standard Support

  `labeled_comprehension` has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variable `SCIPY_ARRAY_API=1` and providing CuPy, PyTorch, JAX, or Dask arrays as array arguments. The following combinations of backend and device (or other capability) are supported.

  Library | CPU | GPU
  --- | --- | ---
  NumPy | ✅ | n/a
  CuPy | n/a | ✅
  PyTorch | ✅ | ⛔
  JAX | ⚠️ no JIT | ⛔
  Dask | ⚠️ computes graph | n/a

  > See Support for the array API standard for more information.

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