【问题标题】:How to locate the center node of a giant component in NetworkX?NetworkX中如何定位巨型组件的中心节点?
【发布时间】:2015-11-14 10:05:12
【问题描述】:

我正在使用具有 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 文件,它们的值用作节点的输入。失败后的网络是这样的(这是单个加载文件的结果):

我的问题:如何确定巨型组件中心节点的位置,以及它与左上角的距离例如,坐标为(0,0)?

编辑

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

【问题讨论】:

  • 您能解释一下中心节点是什么意思吗?因为碎片化的组件不再是规则的了。
  • 是的,它是一个不规则的形状。因此,中心节点是指巨型组件的视觉中心节点。举个例子,将视觉中心节点视为质心。这将是“分布质量的加权相对位置总和为零的唯一点,或者如果施加力会导致它在力的方向上移动而不旋转的点。”
  • 嗯,其实我觉得我们可以写一个脚本来计算巨型组件的质心……你觉得可行吗?
  • 嗯,好的,但您可能有多个中心节点。此外,在这种情况下,您不会像以前那样更改节点的键。我的意思是您将它们保留为 (i,j) 而不是 'n'
  • 我其实不在乎哪个节点是真正的中心。像中心的(i,j) 坐标这样的东西是完美的。我不需要确定哪个节点是中心,而只是中心的 position。这样我就摆脱了拥有多个中心节点的问题。同意?此外,如果(i,j) 的值是浮动的,它们总是可以变成int

标签: python numpy graph-theory networkx


【解决方案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])
    

【讨论】:

  • 您的最后一点:1)您为什么提到“中心节点之一”? 2)nx.shortest_path()函数不是暗示我的中心节点和点(0,0)之间有联系吗?在我的大多数情况下,(0,0) 位置没有节点。所以不会有联系。
  • 我提到节点 1 是因为您说将哪个节点作为中心节点并不重要。所以我只是以它为例。
  • 至于 (0,0) 节点,我认为您想获得到该节点的最短路径。所以你必须先检查节点是否存在,如果中心节点和(0,0)之间没有路径,则捕获异常
  • 但我假设您的意思是巨型组件中最左上角的节点。是这样吗?
  • 我可能把事情搞不清楚了,抱歉。我要测量的距离是从巨型组件的中心到网络所在“区域”中的特定点。例如,该点可能位于左上角(位置(0,0))。 (0,0) 位置很少会有节点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 2021-01-02
  • 2016-04-23
  • 2021-03-13
  • 1970-01-01
相关资源
最近更新 更多