Учитывая массив N * N, равный 0 и 1, я хочу построить список кластеров (кластер представляет собой набор связанных точек, помеченных 1).
scipy.ndimage.label
очень полезно, потому что оно говорит вам, какие точки связаны.
Но я также хотел бы, чтобы в моем массиве были периодические граничные условия, т. Е. Точки (0,j)
и (N,j)
идентифицированы (как плоскость, которую я склеиваю, чтобы сделать цилиндр). Поэтому мне нужно сообщить scipy.ndimage.label, что объекты связаны через границу.
Например, если мой исходный массив:
In[187]: a = [[1, 1, 0, 0, 0, 0, 1, 1],[1, 1, 0, 1, 0, 0, 1, 1],[1, 1, 0, 0, 0, 1, 1, 1]]
labels = measurements.label(a)
print(labels)
Out [187]: (array([[1, 1, 0, 0, 0, 0, 2, 2],
[1, 1, 0, 3, 0, 0, 2, 2],
[1, 1, 0, 0, 0, 2, 2, 2]], dtype=int32), 3)
и мне хотелось бы:
(array([[1, 1, 0, 0, 0, 0, 1, 1],
[1, 1, 0, 3, 0, 0, 1, 1],
[1, 1, 0, 0, 0, 1, 1, 1]], dtype=int32), 2)
Параметр структуры метки позволяет указать соединение (например, элементы, подключенные, даже если они касаются по диагонали), может ли оно также использоваться для этой цели?