Skip to main content
 首页 » 编程设计

python之通过唯一标签合并 networkx 中的两个网络映射

2025年05月04日16pander-it

python networkx 模块有一个方法 nx.union 用于合并两个网络图:

C = nx.union(G,H) 

其中 G 和 H 是网络 map ,C 是合并版本。它按编号查找所有节点,并合并具有相同编号的节点。

以 GEXF 格式存储的节点示例:

  <node id="0" label="walking"> 
    <ns0:color b="200" g="11" r="11" /> 
    <attvalues> 
      <attvalue for="0" value="2" /> 
      <attvalue for="1" value="26" /> 
    </attvalues> 
  </node> 

这对我来说是个问题,因为我的 map 具有任意节点编号,但每个节点属性中的标签都是唯一的。当我分配节点号时,我只是通过一个列表并使用列表索引作为节点号,但是 map1 可能在位置 84 处“行走”,而 map2 可能在位置 157 处“行走” - 所以节点号并不容易与节点标签相关。

有谁知道我应该如何使用 networkx 联合网络映射并指定节点标签名称的匹配?

我可能必须编写自己的方法,但只是想确保我没有遗漏任何东西。有一个 union_disjoint() 但它似乎在同一个文件中创建了两个独立的未连接的映射,这没有帮助。

还有第二个 networkx 问题:有没有办法在 GEXF 文件格式中指定节点标签大小和标签颜色?未在 GEXF v1.2 规范草案中列出。

请您参考如下方法:

尝试使用 nx.read_gexf(file,relabel=True)。这将使用 GEXF 节点标签作为 NetworkX 节点标识符。然后,您可以通过将一个图的节点和边添加到另一个图来合并两个图。例如

>>> G = nx.read_gexf(file1, relabel=True) 
>>> H = nx.read_gexf(file2, relabel=True) 
>>> G.add_nodes_from(H.nodes(data=True)) 
>>> G.add_edges_from(H.edges(data=True))