如何在NetworkX中找到巨型组件的中心节点?

时间:2015-11-14 10:05:13

标签: python numpy graph-theory networkx

我正在使用具有2D网格形状的常规网络。它由NxN=100x100=10000个节点组成。它有一个坐标系,node 0位于左上角,(0,0)位置,node 10000位于右下角,(100,100)位置。

网络创建如下:

N=100 #The number of nodes per side
G=nx.grid_2d_graph(N,N)
pos = dict( (n, n) for n in G.nodes() ) #Dictionary of all positions
labels = dict( ((i, j), i + (N-1-j) * N ) for i, j in G.nodes() )
nx.set_node_attributes(G, 'pos', pos) #Store pos attributes in the nodes
nx.set_node_attributes(G, 'labels', labels) #Store labels attributes in the nodes
nx.draw_networkx(G, pos=nx.get_node_attributes(G, 'pos'),
                 labels=nx.get_node_attributes(G, 'labels'),
                 with_labels=False, node_size=10)

由于对多个负载的响应,该网络变得支离破碎。这些是csv个文件,这些文件的值用作节点的输入。失败后,这就是网络的样子(这是单个加载文件的结果):

enter image description here

我的问题:如何确定巨型组件中心节点的位置,并确定其距离左上角的距离例如,角有坐标(0,0)

修改

由于响应的可变性,很少会在位置(0,0)处有一个节点,因此使用nx.shortest_path()将毫无意义,因为所述节点将大部分时间丢失。因此,我想测量网络的一个点(巨型组件的中心)与同一“区域”的另一个点之间的距离,该区域可能不是网络的一部分。因此,函数nx.shortest_path()不能使用,或者当路径不存在时会抛出error

1 个答案:

答案 0 :(得分:1)

  • 首先使用:(referenced here

    检索图表的巨型组件

    giant = max(nx.connected_component_subgraphs(G), key=len)

  • 使用以下内容检索中心节点:

    center_nodes = center(giant)

  • 节点的位置是中心节点本身,因为键是位置。因此,要显示中心节点的位置,例如:

    print center_nodes

  • 要确定从节点之一的中心节点到(i,j)坐标的距离,您必须保留原始图形的所有100x100节点的副本。我将在org_G

    中使用它
    # i,j can represent any coordinate in the 100x100 grid (0,0) for instance
    n = (i,j) 
    print nx.shortest_path(org_G,n,center_nodes[0])