我正在使用 Python (package: NetworkX
) 和一个100
节点网络工作。我创建它,然后通过删除它的一部分节点 ( removal
) 将其分段,如下所示。该脚本计算最大组件的长度及其中心节点。
import networkx as nx
import matplotlib.pyplot as plt
import numpy
N = 10
G=nx.grid_2d_graph(N,N)
pos = dict( (n, n) for n in G.nodes() )
labels = dict( ((i, j), i + (N-1-j) * N ) for i, j in G.nodes() )
nx.relabel_nodes(G,labels,False)
pos = {y:x for x,y in labels.iteritems()}
nx.draw_networkx(G, pos=pos, with_labels=True, node_size = 300)
plt.axis('off')
plt.show()
plt.close()
removal=numpy.array([1,5,18,23,54,8,36,95,41,75,77,56,29,39,81,76,27,34,52,50,53,64,45,85])
G.remove_nodes_from(removal)
nx.draw_networkx(G, pos=pos, with_labels=True, node_size = 300)
plt.axis('off')
plt.show()
giant = max(nx.connected_component_subgraphs(G), key=len) #The largest component
center_nodes = nx.center(giant) #The center node(s)
print len(giant)
print center_nodes
这给了我:
len(giant)=29
和center_nodes=[12,13]
。
我的网络嵌入在一个测量 的二维网格中(N+1)x(N+1)
,并且有自己的坐标系。网络的每个节点都被视为被放置在下面网格中每个单元格的交叉点上:
我的问题:如何将给出的结果“翻译”为网格中单元格 Acenter_nodes=[12,13]
的位置?在这种情况下,我想拥有.center_nodes=[12,13] -> center_coord=13
PS:如果我改变removal
,len(center_nodes)
改变,连接子图的形状也是如此。因此,单元格 A将不会位于与上述相同的位置。考虑到这一点,我希望能够始终获得集群左上角单元格的网格坐标center_nodes
,而不管其在网络中的形状和位置如何。