scipy.cluster.hierarchy.
is_valid_linkage#
- scipy.cluster.hierarchy.is_valid_linkage(Z, warning=False, throw=False, name=None)[source]#
检查连锁矩阵是否有效。
连锁矩阵有效,如果它是一个 2-D 数组(类型 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\]即,群集不能加入另一个群集,除非已生成要加入的群集。
- 参数:
- Zarray_like
连锁矩阵。
- warningbool, optional
当为 True 时,如果传入的连锁矩阵无效,则发出 Python 警告。
- throwbool, optional
当为 True 时,如果传入的连锁矩阵无效,则抛出 Python 异常。
- namestr, optional
此字符串引用无效连锁矩阵的变量名。
- 返回:
- b布尔值
如果不一致矩阵有效,则为 True。
参见
联结
获取联结矩阵的说明。
示例
>>> 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