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