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_isomorphichas experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variable- SCIPY_ARRAY_API=1and 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.singlemethod 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