识别 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
结果是一个元组,其中第二个元素是不同簇的数量。
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
结果是一个元组,其中第二个元素是不同簇的数量。