scipy.cluster.hierarchy.

maxdists#

scipy.cluster.hierarchy.maxdists(Z)[源代码]#

返回任何非单例簇之间的最大距离。

参数:
Zndarray

层次聚类被编码为一个矩阵。有关更多信息,请参阅 linkage

返回:
maxdistsndarray

一个大小为 (n-1) 的双精度 numpy 数组; MD[i] 表示任何低于并包含索引为 i 的节点的所有簇(包括单例簇)之间的最大距离。更具体地说,MD[i] = Z[Q(i)-n, 2].max(),其中 Q(i) 是所有低于并包含节点 i 的节点索引的集合。

参见

linkage

了解链接矩阵的描述。

is_monotonic

用于测试链接矩阵的单调性。

注释

maxdists 除了 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 median, maxdists
>>> from scipy.spatial.distance import pdist

给定一个链接矩阵 Zscipy.cluster.hierarchy.maxdists 计算生成的每个新簇(即,链接矩阵的每一行)任何两个子簇之间的最大距离。

由于层次聚类的性质,在许多情况下,这仅仅是合并形成当前簇的两个子簇之间的距离 - 即 Z[:,2]。

然而,对于非单调聚类分配,例如 scipy.cluster.hierarchy.median 聚类,情况并非总是如此:可能存在簇形成,其中合并的两个簇之间的距离小于其子簇之间的距离。

我们可以在一个示例中看到这一点

>>> 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 = median(pdist(X))
>>> Z
array([[ 0.        ,  1.        ,  1.        ,  2.        ],
       [ 3.        ,  4.        ,  1.        ,  2.        ],
       [ 9.        , 10.        ,  1.        ,  2.        ],
       [ 6.        ,  7.        ,  1.        ,  2.        ],
       [ 2.        , 12.        ,  1.11803399,  3.        ],
       [ 5.        , 13.        ,  1.11803399,  3.        ],
       [ 8.        , 15.        ,  1.11803399,  3.        ],
       [11.        , 14.        ,  1.11803399,  3.        ],
       [18.        , 19.        ,  3.        ,  6.        ],
       [16.        , 17.        ,  3.5       ,  6.        ],
       [20.        , 21.        ,  3.25      , 12.        ]])
>>> maxdists(Z)
array([1.        , 1.        , 1.        , 1.        , 1.11803399,
       1.11803399, 1.11803399, 1.11803399, 3.        , 3.5       ,
       3.5       ])

请注意,虽然创建最后一个簇时合并的两个簇之间的距离是 3.25,但有两个子簇(簇 16 和 17)的距离更大 (3.5)。因此,scipy.cluster.hierarchy.maxdists 在这种情况下返回 3.5。