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
,我们可以应用聚类方法来获得链接矩阵Z
。scipy.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