如何将彼此靠近的数据点聚类并为每个聚类分配一个新的数值?

时间:2019-03-08 18:45:55

标签: python python-2.7 python-2.x

如果我有这样的数据数组:

 [[1, 1, 0, 0, 0, 1, 1],
  [1, 0, 0, 0, 0, 1, 1], 
  [1, 0, 1, 1, 0, 0, 1], 
  [0, 0, 1, 1, 0, 0, 0]]

我如何将每个1s分组,并为每个1s分组分配一个计数,以便得到如下数组:

 [[1, 1, 0, 0, 0, 2, 2],
  [1, 0, 0, 0, 0, 2, 2], 
  [1, 0, 3, 3, 0, 0, 2], 
  [0, 0, 3, 3, 0, 0, 0]]

基本上尝试识别每个数据点群集,并为该数据点群集分配一个特定值以对其进行识别。

1 个答案:

答案 0 :(得分:0)

skimage.measure.label()函数(已经由 Aaron 提及)应该给出您想要的结果:

import numpy as np
import skimage

# Initialize example array
arr = np.array([
    [1, 1, 0, 0, 0, 1, 1],
    [1, 0, 0, 0, 0, 1, 1],
    [1, 0, 1, 1, 0, 0, 1],
    [0, 0, 1, 1, 0, 0, 0],
])

# Label connected regions
result = skimage.measure.label(arr)

print(result)
# Output:
# [[1 1 0 0 0 2 2]
#  [1 0 0 0 0 2 2]
#  [1 0 3 3 0 0 2]
#  [0 0 3 3 0 0 0]]