1

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

C = nx.union(G,H)

其中 G 和 H 是网络图,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>

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

有谁知道我应该如何与 networkx 联合到网络地图并通过节点标签名称指定匹配?

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

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

4

1 回答 1

7

尝试使用 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))
于 2012-08-02T14:05:13.590 回答