scipy.cluster.hierarchy.

is_isomorphic#

scipy.cluster.hierarchy.is_isomorphic(T1, T2)[Quelle]#

Bestimmt, ob zwei verschiedene Clusterzuweisungen äquivalent sind.

Parameter:
T1array_like

Eine Zuweisung von Singleton-Cluster-IDs zu Flat-Cluster-IDs.

T2array_like

Eine Zuweisung von Singleton-Cluster-IDs zu Flat-Cluster-IDs.

Rückgabe:
bbool

Ob die Flat-Cluster-Zuweisungen T1 und T2 äquivalent sind.

Siehe auch

linkage

für eine Beschreibung, was eine Linkage-Matrix ist.

fcluster

für die Erstellung von Flat-Cluster-Zuweisungen.

Hinweise

Array API-Unterstützung (experimentell): Wenn die Eingabe ein Lazy Array ist (z. B. Dask oder JAX), ist der Rückgabewert ein 0-dimensionales boolesches Array.

is_isomorphic bietet experimentelle Unterstützung für Python Array API Standard-kompatible Backends zusätzlich zu NumPy. Bitte erwägen Sie, diese Funktionen zu testen, indem Sie die Umgebungsvariable SCIPY_ARRAY_API=1 setzen und CuPy-, PyTorch-, JAX- oder Dask-Arrays als Array-Argumente übergeben. Die folgenden Kombinationen von Backend und Gerät (oder anderer Funktionalität) werden unterstützt.

Bibliothek

CPU

GPU

NumPy

n/a

CuPy

n/a

PyTorch

JAX

⚠️ siehe Hinweise

Dask

⚠️ siehe Hinweise

n/a

Siehe Unterstützung für den Array API Standard für weitere Informationen.

Beispiele

>>> from scipy.cluster.hierarchy import fcluster, is_isomorphic
>>> from scipy.cluster.hierarchy import single, complete
>>> from scipy.spatial.distance import pdist

Zwei Flat-Cluster-Zuweisungen können isomorph sein, wenn sie dieselbe Clusterzuweisung mit unterschiedlichen Labels darstellen.

Zum Beispiel können wir die Methode scipy.cluster.hierarchy.single verwenden und die Ausgabe auf vier Cluster reduzieren

>>> X = [[0, 0], [0, 1], [1, 0],
...      [0, 4], [0, 3], [1, 4],
...      [4, 0], [3, 0], [4, 1],
...      [4, 4], [3, 4], [4, 3]]
>>> Z = single(pdist(X))
>>> T = fcluster(Z, 1, criterion='distance')
>>> T
array([3, 3, 3, 4, 4, 4, 2, 2, 2, 1, 1, 1], dtype=int32)

Dies können wir dann auch mit der Methode scipy.cluster.hierarchy.complete tun:

>>> Z = complete(pdist(X))
>>> T_ = fcluster(Z, 1.5, criterion='distance')
>>> T_
array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], dtype=int32)

Wie wir sehen können, erhalten wir in beiden Fällen vier Cluster und alle Datenpunkte sind gleich verteilt - das einzige, was sich ändert, sind die Flat-Cluster-Labels (3 => 1, 4 =>2, 2 =>3 und 4 =>1), daher sind beide Cluster-Zuweisungen isomorph

>>> is_isomorphic(T, T_)
True