scipy.cluster.hierarchy.

is_isomorphic#

scipy.cluster.hierarchy.is_isomorphic(T1, T2)[источник]#

Определить, эквивалентны ли два разных назначения кластеров.

Параметры:
T1array_like

Назначение идентификаторов одиночных кластеров плоским идентификаторам кластеров.

T2array_like

Назначение идентификаторов одиночных кластеров плоским идентификаторам кластеров.

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

Являются ли назначения плоских кластеров T1 и T2 эквивалентны.

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

linkage

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

fcluster

для создания плоских назначений кластеров.

Примечания

Поддержка Array API (экспериментальная): Если вход является ленивым массивом (например, Dask или JAX), возвращаемое значение будет 0-мерным булевым массивом.

is_isomorphic имеет экспериментальную поддержку совместимых с 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 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: 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)

Как мы видим, в обоих случаях мы получаем четыре кластера, и все точки данных распределены одинаково — меняются только плоские метки кластеров (3 => 1, 4 =>2, 2 =>3 и 4 =>1), поэтому оба назначения кластеров изоморфны:

>>> is_isomorphic(T, T_)
True