Python 我怎样才能有效地翻译;地形“;numpy数组进入networkx图形?

Python 我怎样才能有效地翻译;地形“;numpy数组进入networkx图形?,python,arrays,numpy,data-structures,graph,Python,Arrays,Numpy,Data Structures,Graph,我有一个2d布尔numpy数组a。每个元素都是地图的一个像素,真对应于地形,假对应于水。比如说,我想检查我有多少个不同的大陆,所以我想使用networx.number\u connected\u components(G) 我可以手动构建图G,迭代数组A的元素,并检查地块是否连接(像素只有在具有公共边时才被视为连接,因此地块的每个像素最多可以连接到4,并且不允许对角连接) 但这给我的印象是低效和不和谐。我怎样才能做得更好 要识别和统计连接区域的数量,可以使用(因此不需要networkx)。比如说

我有一个2d布尔numpy数组a。每个元素都是地图的一个像素,真对应于地形,假对应于水。比如说,我想检查我有多少个不同的大陆,所以我想使用networx.number\u connected\u components(G)

我可以手动构建图G,迭代数组A的元素,并检查地块是否连接(像素只有在具有公共边时才被视为连接,因此地块的每个像素最多可以连接到4,并且不允许对角连接)


但这给我的印象是低效和不和谐。我怎样才能做得更好

要识别和统计连接区域的数量,可以使用(因此不需要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
也接受布尔数组。)