要识别和计算连接区域的数量,您可以使用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 也接受一个布尔数组。)