is_isomorphic#
- 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
Notes
Array API support (experimental): If the input is a lazy Array (e.g. Dask or JAX), the return value will be a 0-dimensional bool Array.
is_isomorphic
has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variableSCIPY_ARRAY_API=1
and providing CuPy, PyTorch, JAX, or Dask arrays as array arguments. The following combinations of backend and device (or other capability) are supported.Library
CPU
GPU
NumPy
✅
n/a
CuPy
n/a
⛔
PyTorch
✅
⛔
JAX
⚠️ see notes
⛔
Dask
⚠️ see notes
n/a
See Support for the array API standard for more information.
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 the
scipy.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