scipy.cluster.hierarchy.

is_valid_linkage#

scipy.cluster.hierarchy.is_valid_linkage(Z, предупреждение=False, выбросить=False, имя=None)[источник]#

Проверить корректность матрицы связей.

Матрица связей действительна, если это двумерный массив (тип double) с \(n\) строк и 4 столбца. Первые два столбца должны содержать индексы от 0 до \(2n-1\). Для заданной строки i, следующие два выражения должны выполняться:

\[0 \leq \mathtt{Z[i,0]} \leq i+n-1 0 \leq Z[i,1] \leq i+n-1\]

То есть, кластер не может присоединиться к другому кластеру, пока присоединяемый кластер не был сгенерирован.

Четвертый столбец Z представляет количество исходных наблюдений в кластере, поэтому допустимый Z[i, 3] значение не может превышать количество исходных наблюдений.

Параметры:
Zarray_like

Матрица связей.

предупреждениеbool, необязательно

Когда True, выдаёт предупреждение Python, если переданная матрица связей недействительна.

выброситьbool, необязательно

Когда True, вызывает исключение Python, если переданная матрица связей недействительна.

имяstr, optional

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

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

True, если матрица несоответствий действительна; False в противном случае.

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

linkage

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

Примечания

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

is_valid_linkage имеет экспериментальную поддержку совместимых с 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 ward, is_valid_linkage
>>> from scipy.spatial.distance import pdist

Все матрицы связей, сгенерированные методами кластеризации в этом модуле, будут корректными (т.е. они будут иметь соответствующие размеры, и два обязательных выражения будут выполняться для всех строк).

Мы можем проверить это с помощью scipy.cluster.hierarchy.is_valid_linkage:

>>> 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 = ward(pdist(X))
>>> Z
array([[ 0.        ,  1.        ,  1.        ,  2.        ],
       [ 3.        ,  4.        ,  1.        ,  2.        ],
       [ 6.        ,  7.        ,  1.        ,  2.        ],
       [ 9.        , 10.        ,  1.        ,  2.        ],
       [ 2.        , 12.        ,  1.29099445,  3.        ],
       [ 5.        , 13.        ,  1.29099445,  3.        ],
       [ 8.        , 14.        ,  1.29099445,  3.        ],
       [11.        , 15.        ,  1.29099445,  3.        ],
       [16.        , 17.        ,  5.77350269,  6.        ],
       [18.        , 19.        ,  5.77350269,  6.        ],
       [20.        , 21.        ,  8.16496581, 12.        ]])
>>> is_valid_linkage(Z)
True

Однако, если мы создадим матрицу связей неправильно — или если мы изменим корректную так, что любое из требуемых выражений перестанет выполняться, то проверка завершится неудачей:

>>> Z[3][1] = 20    # the cluster number 20 is not defined at this point
>>> is_valid_linkage(Z)
False