当前位置:   article > 正文

【Python】networkx读取gml图文件,有两个问题影响使用_networkx 读取gml文件

networkx 读取gml文件

【问题描述】

networkx可直接读取gml文件:nx.read_gml(file),但是有两个问题影响使用:

(1)一定要求gml文件中的节点有“label”键值对,不然会报错

networkx.exception.NetworkXError: node #0 has no 'label' attribute

(2)对节点的索引必须为label值。例如,G._node[label]、G.neighbors[label],以label索引,而不是id。如果你习惯通过节点编号0、1、2、..的方式进行节点索引,以及该编号同时用作矩阵下标对应,那么会很难受。

 

【解决方案】

(1)改gml文件,节点统一标签为0、1、2、...;

(2)面对现实,规范代码:不要拿节点编号做索引;

(3)修改代码,做一个节点label对节点编号的反向索引;

例如,我写了一个函数,对节点重新编码,并基于新的编码构建新图,结束后再替换为标签

  1. def build_new_G(G):
  2. nodes = []
  3. edges = []
  4. nodes_id = dict()
  5. nodes_label = dict()
  6. edges_id = []
  7. for id, label in enumerate(G.nodes()):
  8. nodes_id[label] = id
  9. nodes_label[id] = label
  10. nodes.append(id)
  11. for (v0, v1) in G.edges():
  12. edges.append(nodes_id[v0], nodes_id[v1])
  13. self.edges_id = deepcopy(edges)
  14. G = nx.Graph()
  15. G.add_nodes_from(nodes)
  16. G.add_edges_from(edges)
  17. return G, nodes_id, edges_id, nodes_label

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/334537
推荐阅读
相关标签
  

闽ICP备14008679号