scipy.cluster.hierarchy.
is_isomorphic#
- scipy.cluster.hierarchy.is_isomorphic(T1, T2)[source]#
确定两个不同的聚类分配是否等价。
- 参数:
- T1类数组
单个簇 ID 到扁平簇 ID 的分配。
- T2类数组
单个簇 ID 到扁平簇 ID 的分配。
- 返回:
- bbool
扁平簇分配 T1 和 T2 是否等价。
注释
数组 API 支持(实验性): 如果输入是一个惰性数组(例如 Dask 或 JAX),返回值将是一个 0 维布尔数组。
is_isomorphic
除了 NumPy 之外,还实验性地支持与 Python Array API Standard 兼容的后端。请考虑通过设置环境变量SCIPY_ARRAY_API=1
并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些特性。支持以下后端和设备(或其他能力)的组合。库
CPU
GPU
NumPy
✅
不适用
CuPy
不适用
⛔
PyTorch
✅
⛔
JAX
⚠️ 参见注释
⛔
Dask
⚠️ 参见注释
不适用
有关更多信息,请参见对数组 API 标准的支持。
示例
>>> from scipy.cluster.hierarchy import fcluster, is_isomorphic >>> from scipy.cluster.hierarchy import single, complete >>> from scipy.spatial.distance import pdist
如果两个扁平簇分配表示相同的簇分配,但具有不同的标签,则它们可以是同构的。
例如,我们可以使用
scipy.cluster.hierarchy.single
方法并将输出扁平化为四个簇>>> 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)
然后我们可以使用
scipy.cluster.hierarchy.complete
方法做同样的事情:>>> 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)
我们可以看到,在这两种情况下,我们都获得了四个簇,并且所有数据点都以相同的方式分布 - 唯一改变的是扁平簇标签(3 => 1, 4 => 2, 2 => 3 and 4 => 1),因此两个簇分配是同构的
>>> is_isomorphic(T, T_) True