我想比較兩個使用networkx庫的圖形。 我想嘗試包含3個節點的硬編碼示例。其中一個圖形被引用,所以我想檢查第二個圖形中的邊緣是否在同一個位置。我正在考慮簡單的算法,它會從給定的圖中減去參考圖,如果結果不是空圖,則返回false。計算網絡中兩個圖形邊緣之間的差異
我的代碼如下,但它不工作:
import networkx as nx
import matplotlib.pyplot as plt
S=nx.DiGraph()#S-sample graph
S.add_nodes_from([0,1,2])
S.add_edge(0,2)
S.add_edge(1,2)
nx.draw(S)
#plt.savefig("S.png")
#plt.show()
R=nx.DiGraph()#R-reference graph
R.add_nodes_from([0,1,2])
R.add_edge(1,2)
nx.draw(R)
#plt.savefig("R.png")
#plt.show()
def difference(S, R):
DIF=nx.create_empty_copy(R)
DIF.name="Difference of (%s and %s)"%(S.name, R.name)
if set(S)!=set(R):
raise nx.NetworkXError("Node sets of graphs is not equal")
# if S.is_multipgraph():
# edges=S.edges_iter(keys=True)
# else:
edges=S.edges_iter()
for e in edges:
if not R.has_edge(*e):
DIF.add_edge(*e)
return DIF
D=difference(S, R)
plt.show(D)
S.edges())!= set(R.edges())'? – Ward
我可以這樣做,但我仍然需要指出有什麼區別 – Mikul
將差異的邊緣添加到您的新DiGraph? (sedges())的差異(seted(R.edges())):DIF.add_edge(e)' – Ward