在一个只有0和1的对称numpy矩阵中,有没有一种方法来计算“1的连接簇”的数目?
例如下面的numpy矩阵:
np.array([[0, 0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0]]
))
有两簇相连的1:
3条答案
按热度按时间9o685dep1#
您可以使用
scipy.ndimage.label
。如果要标识4个群集,请用途:
输出:
4
默认结构元素(内核)不包括对角线:
因此,如果您认为有两个集群(通过对角线连接),请更改默认内核:
输出:
2
使用的输入:
7ivaypg92#
我不认为有一个简单的方法,或者一个提供的函数,你必须使用一个算法。
这个问题的典型算法被称为连通分量标记,它被用于图像处理。该算法在维基百科上有描述:https://en.wikipedia.org/wiki/Connected-component_labeling
qacovj5a3#
当矩阵中有很多
one
并且n
很大时,我的解可能会引发RecursionError
。