scipy.ndimage.

labeled_comprehension#

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

Ungefähr äquivalent zu [func(input[labels == i]) for i in index].

Wendet sequenziell eine beliebige Funktion (die mit array_like Eingaben arbeitet) auf Teilmengen eines N-dimensionalen Bildarrays an, die durch labels und index spezifiziert sind. Es besteht die Option, der Funktion PositionsParameter als zweites Argument zu übergeben.

Parameter:
inputarray_like

Daten, aus denen labels zur Verarbeitung ausgewählt werden.

labelsarray_like oder None

Beschriftungen für Objekte in input. Wenn nicht None, muss das Array die gleiche Form wie input haben. Wenn None, wird func auf das verflachte input angewendet.

indexint, Sequenz von ints oder None

Teilmenge von labels, auf die func angewendet werden soll. Wenn ein Skalar, wird ein einzelner Wert zurückgegeben. Wenn None, wird func auf alle Nicht-Null-Werte von labels angewendet.

funccallable

Python-Funktion, die auf labels aus input angewendet werden soll.

out_dtypedtype

Dtype, der für result verwendet werden soll.

defaultint, float oder None

Standardrückgabewert, wenn ein Element von index nicht in labels vorhanden ist.

pass_positionsbool, optional

Wenn True, werden lineare Indizes als zweites Argument an func übergeben. Standard ist False.

Rückgabe:
resultndarray

Ergebnis der Anwendung von func auf jedes der labels zu input in index.

Beispiele

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

Rückgriff auf default

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

Übergabe von Positionen

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