Как кластеризовать точки данных рядом друг с другом и назначить каждому кластеру новое числовое значение? - PullRequest
0 голосов
/ 08 марта 2019

Если у меня есть массив данных, подобный этому:

 [[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]]

Как кластеризовать каждую группировку из 1 с и назначить каждой группе из 1 с счетчик так, чтобы я получил массив, подобный этому:

 [[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 голосов
/ 08 марта 2019

Функция skimage.measure.label() (как уже упоминалось Аарон ) должна дать именно тот результат, который вы ищете:

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]]
...