全部
我尝试继承自己的networkx.Graph,在创建图形时添加两个节点和一个边。但是失败了
networkx.exception.NetworkXError: ('The node sets of G and H are not disjoint.', 'Use appropriate rename=(Gprefix,Hprefix)or use disjoint_union(G,H).')
当我尝试合并图形时,这是我的代码。我想念什么吗?
#!/usr/bin/python3
import networkx as nx
class die(nx.Graph):
nLatency = 2
def __init__(self):
super().__init__()
self.addNet()
def addNet(self):
self.add_node('N0')
self.add_node('N1')
self.add_edge('N0', 'N1', name='nLink', latency=self.nLatency)
S0D0 = die()
S1D0 = die()
Top = nx.union(S0D0, S1D0, rename=('S0D0', 'S1D0'))
答案 0 :(得分:0)
因此,这里发生的是networkx尝试创建两个临时图,它们的一个节点是'S0D0-N0'
,'S0D0-N1'
,另一个是'S1D0-N1'
,'S1D0-N2'
。然后尝试加入他们。
但是,当您在执行代码时对其进行挖掘时,创建的两个新图与原始图具有相同的类。因此,我们将创建的新图形称为H1
和H2
。因为H1
和H2
都具有类die
,所以它们先用节点'N0'
和'N1'
初始化,然后用'S0D0-N0'
,{{1 }}或'S0D0-N1'
,'S1D0-N1'
被添加。因此,两者均用'S1D0-N2'
和'N0'
初始化。
因此,在'N1'
处理的下一个阶段,它将测试union
和H1
是否具有任何公共节点,并且它们都有。这样您就会得到错误。
所以这就是错误的原因。如何解决它可能取决于您为什么要使用这些节点初始化图,以及您想要H2
拥有什么类。
如果Top
具有类Top
,则将必须具有die
和'N0'
(由于初始化),我怀疑您实际上并不需要。如果您只希望'N1'
成为Top
,则可以先将Graph
和S0D0
变成S1D0
s:
Graph