scipy.cluster.hierarchy.

is_valid_im#

scipy.cluster.hierarchy.is_valid_im(R, warning=False, throw=False, name=None)[source]#

如果传递的不一致矩阵有效,则返回 True。

它必须是 \(n\) x 4 的双精度数组。标准差 R[:,1] 必须是非负的。链接计数 R[:,2] 必须是正数,并且不大于 \(n-1\)

参数:
Rndarray

要检查有效性的不一致矩阵。

warningbool, optional

如果传递的链接矩阵无效,则当为 True 时,发出 Python 警告。

throwbool, optional

如果传递的链接矩阵无效,则当为 True 时,抛出 Python 异常。

namestr, optional

此字符串引用无效链接矩阵的变量名。

返回值:
bbool

如果不一致矩阵有效,则为 True;否则为 False。

参见

linkage

有关链接矩阵是什么的描述。

inconsistent

用于创建不一致矩阵。

备注

Array API 支持 (实验性): 如果输入是惰性数组(例如 Dask 或 JAX),则返回值可能是 0 维布尔数组。当 warning=True 或 throw=True 时,调用此函数会将数组具体化。

is_valid_im 除了 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 ward, inconsistent, is_valid_im
>>> from scipy.spatial.distance import pdist

给定数据集 X,我们可以应用聚类方法来获得链接矩阵 Zscipy.cluster.hierarchy.inconsistent 也可以用来获得与此聚类过程相关联的不一致矩阵 R

>>> 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))
>>> R = inconsistent(Z)
>>> 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.        ]])
>>> R
array([[1.        , 0.        , 1.        , 0.        ],
       [1.        , 0.        , 1.        , 0.        ],
       [1.        , 0.        , 1.        , 0.        ],
       [1.        , 0.        , 1.        , 0.        ],
       [1.14549722, 0.20576415, 2.        , 0.70710678],
       [1.14549722, 0.20576415, 2.        , 0.70710678],
       [1.14549722, 0.20576415, 2.        , 0.70710678],
       [1.14549722, 0.20576415, 2.        , 0.70710678],
       [2.78516386, 2.58797734, 3.        , 1.15470054],
       [2.78516386, 2.58797734, 3.        , 1.15470054],
       [6.57065706, 1.38071187, 3.        , 1.15470054]])

现在我们可以使用 scipy.cluster.hierarchy.is_valid_im 来验证 R 是否正确

>>> is_valid_im(R)
True

但是,如果 R 构建错误(例如,其中一个标准差设置为负值),则检查将失败

>>> R[-1,1] = R[-1,1] * -1
>>> is_valid_im(R)
False