scipy.cluster.hierarchy.

maxdists#

scipy.cluster.hierarchy.maxdists(Z)[источник]#

Вернуть максимальное расстояние между любыми несинглетонными кластерами.

Параметры:
Zndarray

Иерархическая кластеризация, закодированная как матрица. Смотрите linkage для получения дополнительной информации.

Возвращает:
maxdistsndarray

A (n-1) размерный numpy массив doubles; MD[i] представляет максимальное расстояние между любым кластером (включая одиночные элементы) ниже и включая узел с индексом i. Более конкретно, MD[i] = Z[Q(i)-n, 2].max() где Q(i) является множеством всех индексов узлов ниже и включая узел i.

Смотрите также

linkage

для описания того, что такое матрица связей.

is_monotonic

для проверки монотонности матрицы связей.

Примечания

maxdists имеет экспериментальную поддержку совместимых с Python Array API Standard бэкендов в дополнение к NumPy. Пожалуйста, рассмотрите тестирование этих функций, установив переменную окружения SCIPY_ARRAY_API=1 и предоставление массивов CuPy, PyTorch, JAX или Dask в качестве аргументов массива. Поддерживаются следующие комбинации бэкенда и устройства (или других возможностей).

Библиотека

CPU

GPU

NumPy

н/д

CuPy

н/д

PyTorch

JAX

Dask

⚠️ объединяет блоки

н/д

См. Поддержка стандарта array API для получения дополнительной информации.

Примеры

>>> from scipy.cluster.hierarchy import median, maxdists
>>> from scipy.spatial.distance import pdist

Дана матрица связей Z, scipy.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 в этом случае.