is_isomorphic — SciPy v1.15.3 Manual (original) (raw)

scipy.cluster.hierarchy.

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

Determine if two different cluster assignments are equivalent.

Parameters:

T1array_like

An assignment of singleton cluster ids to flat cluster ids.

T2array_like

An assignment of singleton cluster ids to flat cluster ids.

Returns:

bbool

Whether the flat cluster assignments T1 and T2 are equivalent.

See also

linkage

for a description of what a linkage matrix is.

fcluster

for the creation of flat cluster assignments.

Examples

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

Two flat cluster assignments can be isomorphic if they represent the same cluster assignment, with different labels.

For example, we can use the scipy.cluster.hierarchy.single: method and flatten the output to four clusters:

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)

We can then do the same using thescipy.cluster.hierarchy.complete: method:

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)

As we can see, in both cases we obtain four clusters and all the data points are distributed in the same way - the only thing that changes are the flat cluster labels (3 => 1, 4 =>2, 2 =>3 and 4 =>1), so both cluster assignments are isomorphic:

is_isomorphic(T, T_) True