要识别并统计连接区域的数量,您可以使用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
还接受一个布尔阵列。)