[英]class inherit from networkx.Graph fails when using networkx.union()
所有
我嘗試繼承自己的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'))
因此,這里發生的是networkx嘗試創建兩個臨時圖,它們的一個節點為'S0D0-N0'
, 'S0D0-N1'
,另一個為'S1D0-N1'
和'S1D0-N2'
。 然后,它嘗試加入他們。
但是,當您在執行此操作時仔細研究代碼時,創建的兩個新圖與原始圖具有相同的類。 因此,我們將其稱為創建的新圖形H1
和H2
。 因為H1
和H2
都具有類die
,所以它們使用節點'N0'
和'N1'
進行初始化,然后添加'S0D0-N0'
, 'S0D0-N1'
或'S1D0-N1'
, 'S1D0-N2'
。 因此, 兩者均以'N0'
和'N1'
初始化。
因此,然后在union
過程的下一個階段,它將測試H1
和H2
是否具有任何公共節點,並且它們都有。 所以你得到了錯誤。
這就是錯誤的原因。 如何修復它可能取決於您為什么要使用這些節點初始化圖以及您希望Top
擁有什么類。
如果Top
具有class die
,它將必須具有'N0'
和'N1'
(由於初始化),我懷疑您實際上並不需要。 如果只希望Top
成為Graph
,則可以先將S0D0
和S1D0
轉換為Graph
:
Top = nx.union(nx.Graph(S0D0), nx.Graph(S1D0), rename=('S0D0', 'S1D0'))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.