识别 Python DataFrame 中的簇数

Identifying the number of clusters in a Python DataFrame

Picture showing the clusters I wish to count

我想确定我的 DataFrame 中非零簇的数量。

这里我有一个总共有四 (4) 个集群的 DataFrame,但我找不到可以帮我计算它们的代码。

data = [
    [0,0,0,255,255,255,0,0],
    [0,255,0,255,255,255,0,0],
    [0,0,0,255,255,255,0,0,],
    [0,0,0,0,255,0,0,0],
    [0,255,255,0,0,255,0,0],
    [0,255,0,0,0,255,0,0],
    [0,0,0,0,0,255,0,0],
    [0,0,0,0,0,255,0,0]
]
    
df2 = pd.DataFrame(data)

感谢任何帮助!

我自己搜索了一下,得到了这个。在没有背景知识的情况下有点试错,但我稍微改变了你数据中的组数,skimage.measure 总是得到正确的结果:

import numpy as np
from skimage import measure

data = [
    [0, 0, 0, 255, 255, 255, 0, 0],
    [0, 255, 0, 255, 255, 255, 0, 0],
    [0, 0, 0, 255, 255, 255, 0, 0, ],
    [0, 0, 0, 0, 255, 0, 0, 0],
    [0, 255, 255, 0, 0, 255, 0, 0],
    [0, 255, 0, 0, 0, 255, 0, 0],
    [0, 0, 0, 0, 0, 255, 0, 0],
    [0, 0, 0, 0, 0, 255, 0, 0]
]
arr = np.array(data)
groups, group_count = measure.label(arr == 255, return_num = True, connectivity = 1)

print('Groups: \n', groups)
print(f'Number of groups: {group_count}')

Output:

Groups:
[[0 0 0 1 1 1 0 0]
 [0 2 0 1 1 1 0 0]
 [0 0 0 1 1 1 0 0]
 [0 0 0 0 1 0 0 0]
 [0 3 3 0 0 4 0 0]
 [0 3 0 0 0 4 0 0]
 [0 0 0 0 0 4 0 0]
Number of Groups: 4

measure.label 中定义标准。在您的情况下,arr==255 可以工作,或者如果值不总是只有 255,则只需 arr>0 即可。连接性需要设置为 1,因为您不希望集群对角线连接(如果这样做,请设置它到 2)。如果 return_num = True 结果是一个元组,其中第二个元素是不同簇的数量。