scipy.cluster.hierarchy.

optimal_leaf_ordering#

scipy.cluster.hierarchy.optimal_leaf_ordering(Z, y, metric='euclidean')[source]#

给定一个连接矩阵 Z 和距离,重新排序切割树。

参数:
Zndarray

表示为连接矩阵的分层聚类。有关返回结构和算法的更多信息,请参见 linkage

yndarray

从中生成 Z 的压缩距离矩阵。或者,可以将 m 个观察向量的集合(位于 n 维空间中)作为 m 行 n 列的数组传递。

metricstr 或 function,可选

如果 y 是观察向量的集合,则使用的距离度量;否则忽略。有关有效的距离度量列表,请参见 pdist 函数。也可以使用自定义距离函数。

返回:
Z_orderedndarray

连接矩阵 Z 的副本,经过重新排序以最小化相邻叶子之间的距离。

注释

optimal_leaf_ordering 除了 NumPy 之外,还对 Python Array API Standard 兼容后端提供实验性支持。请考虑通过设置环境变量 SCIPY_ARRAY_API=1 并提供 CuPy、PyTorch、JAX 或 Dask 数组作为数组参数来测试这些功能。支持以下后端和设备(或其他功能)的组合。

CPU

GPU

NumPy

n/a

CuPy

n/a

PyTorch

JAX

Dask

⚠️ 合并块

n/a

有关更多信息,请参见 支持数组 API 标准

示例

>>> import numpy as np
>>> from scipy.cluster import hierarchy
>>> rng = np.random.default_rng()
>>> X = rng.standard_normal((10, 10))
>>> Z = hierarchy.ward(X)
>>> hierarchy.leaves_list(Z)
array([0, 3, 1, 9, 2, 5, 7, 4, 6, 8], dtype=int32)
>>> hierarchy.leaves_list(hierarchy.optimal_leaf_ordering(Z, X))
array([3, 0, 2, 5, 7, 4, 8, 6, 9, 1], dtype=int32)