我相信您的问题类似于AttributeError中的问题:“ DiGraph”对象没有属性“_node”
那里的问题是要研究的图形是在networkx 1.x中创建的,然后进行了腌制。然后,该图具有networkx 1.x对象具有的属性。我相信这也发生在您身上。
现在,您已经打开它,并且正在将networkx 2.x中的工具应用到该图。但是这些工具假定它是一个networkx 2.x DiGraph,所有属性都应在2.x DiGraph中。特别是,它期望_succ
为1.x DiGraph没有的节点定义。
因此,我认为有两种方法可行:
删除networkx 2.x,并替换为networkx 1.11。
这不是最佳选择,因为networkx 2.x更强大。同样,在2.x和1.x中都可以工作的代码(遵循您提到的迁移指南)将在1.x中效率较低(例如,在某些情况下1.x代码正在使用列表和2.x代码正在使用生成器)。
将1.x图形转换为2.x图形(由于我的计算机目前没有1.x,因此我无法轻松进行测试- 如果有人尝试此操作,请在评论中注明是否有效,以及您的网络是否加权):
#you need commands here to load the 1.x graph G
#
import networkx as nx #networkx 2.0
H = nx.DiGraph() #or Graph for someone else with this problem.
H.add_nodes_from(G.nodes(data=True))
H.add_edges_from(G.edges(data=True))
将data=True
用于确保任何边缘/节点的权重将被保留。 H
现在是networkx 2.x DiGraph,其边缘和节点具有任何属性G
。networkx 2.x命令应该可以在其上运行。
联系其他研究人员,并警告他/她该代码示例现在已过时。