scipy.cluster.hierarchy.
is_monotonic#
- scipy.cluster.hierarchy.is_monotonic(Z)[source]#
如果傳遞的連結是單調的,則返回 True。
如果對於每個加入的群集 \(s\) 和 \(t\),它們之間的距離不小於任何先前加入的群集之間的距離,則連結是單調的。
- 參數:
- Zndarray
要檢查單調性的連結矩陣。
- 返回:
- bbool
一個布林值,指示連結是否為單調的。
另請參閱
linkage
有關連結矩陣是什麼的描述。
範例
>>> from scipy.cluster.hierarchy import median, ward, is_monotonic >>> from scipy.spatial.distance import pdist
根據定義,某些階層式分群演算法(例如
scipy.cluster.hierarchy.ward
)會產生樣本到群集的單調分配;但是,對於其他階層式方法(例如scipy.cluster.hierarchy.median
)而言,情況並非總是如此。給定一個連結矩陣
Z
(作為階層式分群方法的結果),我們可以使用scipy.cluster.hierarchy.is_monotonic
以程式方式測試它是否具有單調性屬性>>> 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_monotonic(Z) True
>>> Z = median(pdist(X)) >>> Z array([[ 0. , 1. , 1. , 2. ], [ 3. , 4. , 1. , 2. ], [ 9. , 10. , 1. , 2. ], [ 6. , 7. , 1. , 2. ], [ 2. , 12. , 1.11803399, 3. ], [ 5. , 13. , 1.11803399, 3. ], [ 8. , 15. , 1.11803399, 3. ], [11. , 14. , 1.11803399, 3. ], [18. , 19. , 3. , 6. ], [16. , 17. , 3.5 , 6. ], [20. , 21. , 3.25 , 12. ]]) >>> is_monotonic(Z) False
請注意,此方法等效於僅驗證連結矩陣第三列中的距離是否以單調遞增的順序出現。