scipy.ndimage.

value_indices#

scipy.ndimage.value_indices(arr, *, ignore_value=None)[Quelle]#

Findet Indizes für jeden unterschiedlichen Wert im gegebenen Array.

Parameter:
arrndarray von Integers

Array mit ganzzahligen Werten.

ignore_valueint, optional

Dieser Wert wird bei der Suche im arr-Array ignoriert. Wenn nicht angegeben, werden alle gefundenen Werte in die Ausgabe aufgenommen. Standard ist None.

Rückgabe:
indicesdictionary

Ein Python-Dictionary mit Array-Indizes für jeden unterschiedlichen Wert. Das Dictionary ist nach den unterschiedlichen Werten geordnet; die Einträge sind Tupel von Array-Indizes, die alle Vorkommen des Wertes innerhalb des Arrays abdecken.

Dieses Dictionary kann erheblichen Speicherplatz beanspruchen, oft ein Vielfaches der Größe des Eingabearrays.

Hinweise

Für ein kleines Array mit wenigen unterschiedlichen Werten könnte man numpy.unique() verwenden, um alle möglichen Werte zu finden, und (arr == val), um jeden Wert innerhalb dieses Arrays zu lokalisieren. Für große Arrays mit vielen unterschiedlichen Werten kann dies jedoch äußerst ineffizient werden, da die Lokalisierung jedes Wertes eine neue Suche im gesamten Array erfordern würde. Mit dieser Funktion gibt es im Wesentlichen eine einzige Suche, bei der die Indizes für alle unterschiedlichen Werte gespeichert werden.

Dies ist nützlich, wenn ein kategorisches Bild (z. B. eine Segmentierung oder Klassifizierung) mit einem zugehörigen Bild anderer Daten abgeglichen wird, wodurch dann beliebige per-Klasse-Statistiken berechnet werden können. Bietet eine flexiblere Alternative zu Funktionen wie scipy.ndimage.mean() und scipy.ndimage.variance().

Einige andere eng verwandte Funktionalitäten mit unterschiedlichen Stärken und Schwächen finden sich auch in scipy.stats.binned_statistic() und der scikit-image-Funktion skimage.measure.regionprops().

Hinweis für IDL-Benutzer: Dies bietet Funktionalität, die äquivalent zu IDLs REVERSE_INDICES-Option ist (gemäß der IDL-Dokumentation für die HISTOGRAM-Funktion).

Hinzugefügt in Version 1.10.0.

Beispiele

>>> import numpy as np
>>> from scipy import ndimage
>>> a = np.zeros((6, 6), dtype=int)
>>> a[2:4, 2:4] = 1
>>> a[4, 4] = 1
>>> a[:2, :3] = 2
>>> a[0, 5] = 3
>>> a
array([[2, 2, 2, 0, 0, 3],
       [2, 2, 2, 0, 0, 0],
       [0, 0, 1, 1, 0, 0],
       [0, 0, 1, 1, 0, 0],
       [0, 0, 0, 0, 1, 0],
       [0, 0, 0, 0, 0, 0]])
>>> val_indices = ndimage.value_indices(a)

Das Dictionary val_indices wird einen Eintrag für jeden unterschiedlichen Wert im Eingabearray enthalten.

>>> val_indices.keys()
dict_keys([np.int64(0), np.int64(1), np.int64(2), np.int64(3)])

Der Eintrag für jeden Wert ist ein Index-Tupel, das die Elemente mit diesem Wert lokalisiert.

>>> ndx1 = val_indices[1]
>>> ndx1
(array([2, 2, 3, 3, 4]), array([2, 3, 2, 3, 4]))

Dies kann verwendet werden, um in das ursprüngliche Array oder ein beliebiges anderes Array mit der gleichen Form zu indizieren.

>>> a[ndx1]
array([1, 1, 1, 1, 1])

Wenn die Nullen ignoriert würden, hätte das resultierende Dictionary keinen Eintrag mehr für Null.

>>> val_indices = ndimage.value_indices(a, ignore_value=0)
>>> val_indices.keys()
dict_keys([np.int64(1), np.int64(2), np.int64(3)])