scipy.ndimage.

labeled_comprehension#

scipy.ndimage.labeled_comprehension(input, labels, index, func, out_dtype, default, pass_positions=False)[源代码]#

大致等同于 [func(input[labels == i]) for i in index]。

将一个任意函数(处理 array_like 输入)顺序应用到由 labelsindex 指定的 N-D 图像数组的子集。有选项以第二个参数的形式向函数提供位置参数。

参数:
input类似数组的对象

从中选择要处理的 labels 数据。

labels类似数组的对象或 None

input 中对象对应的标签。如果非 None,数组必须与 input 形状相同。如果为 None,则将 func 应用到展平的 input

indexint、int 序列或 None

要应用 funclabels 子集。如果为标量,则返回单个值。如果为 None,则将 func 应用到 labels 的所有非零值。

func可调用的对象

Python 函数用于应用 labelsinput

out_dtypedtype

用于 result 的数据类型。

defaultint、float 或 None

index 中的元素在 labels 中不存在时的默认返回值。

pass_positionsbool,可选

如果为 True,将线性索引传递给 func 作为第二个参数。默认值为 False。

返回:
resultndarray

index 中输入的 labels 的每个 func 应用到 input 的结果。

示例

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

退回到 default

>>> lbls = np.arange(1, nlbl+2)
>>> ndimage.labeled_comprehension(a, lbl, lbls, np.mean, float, -1)
array([ 2.75,  5.5 ,  6.  , -1.  ])

传递位置

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