scipy.ndimage.

labeled_comprehension#

scipy.ndimage.labeled_comprehension(входные данные, метки, index, функция, out_dtype, по умолчанию, pass_positions=False)[источник]#

Примерно эквивалентно [func(input[labels == i]) for i in index].

Последовательно применяет произвольную функцию (которая работает с входными данными типа array_like) к подмножествам N-мерного массива изображения, заданным метки и index. Существует возможность предоставить функции позиционные параметры в качестве второго аргумента.

Параметры:
входные данныеarray_like

Данные, из которых производится выбор метки для обработки.

меткиarray_like или None

Метки для объектов в входные данные. Если не None, массив должен иметь ту же форму, что и входные данные. Если None, функция применяется к развернутому входные данные.

indexint, последовательность int или None

Подмножество метки к которому применить функция. Если скаляр, возвращается одно значение. Если None, функция применяется ко всем ненулевым значениям метки.

функцияcallable

Функция Python для применения к метки из входные данные.

out_dtypedtype

Тип данных для использования в результат.

по умолчаниюint, float или None

Значение по умолчанию, возвращаемое, когда элемент index не существует в метки.

pass_positionsbool, необязательно

Если True, передавать линейные индексы в функция в качестве второго аргумента. По умолчанию False.

Возвращает:
результатndarray

Результат применения функция для каждого из метки to входные данные в index.

Примеры

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

Возврат к по умолчанию:

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