要識別並統計連接區域的數量,您可以使用scipy.ndimage.measurements.label
(因此您不需要networkx)。例如,
In [73]: x
Out[73]:
array([[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1],
[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0]])
In [74]: from scipy.ndimage.measurements import label
In [75]: labeled_x, num_labels = label(x)
In [76]: num_labels
Out[76]: 8
In [77]: labeled_x
Out[77]:
array([[1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1, 1, 0, 2, 0, 0, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0],
[0, 0, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0],
[0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5],
[0, 0, 0, 0, 4, 4, 4, 0, 0, 0, 0, 5],
[0, 0, 0, 0, 0, 4, 0, 0, 6, 6, 0, 5],
[0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 5],
[0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0]], dtype=int32)
(在該例子中,是x
0和1的陣列,但label
還接受一個布爾陣列。)