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 输入)顺序应用到由 labels 和 index 指定的 N-D 图像数组的子集。有选项以第二个参数的形式向函数提供位置参数。
- 参数:
- input类似数组的对象
从中选择要处理的 labels 数据。
- labels类似数组的对象或 None
input 中对象对应的标签。如果非 None,数组必须与 input 形状相同。如果为 None,则将 func 应用到展平的 input。
- indexint、int 序列或 None
要应用 func 的 labels 子集。如果为标量,则返回单个值。如果为 None,则将 func 应用到 labels 的所有非零值。
- func可调用的对象
Python 函数用于应用 labels 从 input。
- 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.])