Я хотел бы сравнить два графика с помощью networkx library. Я хочу попробовать hardcoded пример, содержащий 3 узла. Один из графиков ссылается, поэтому я хочу проверить, находится ли во втором ребра в одном и том же месте. Я думал о простом алгоритме, который вычитает контрольный граф из заданного, и если результат не пустой граф, тогда он возвращает false.Вычисление разницы между двумя графами «край мудрый» в сетиx
Мой код выглядит следующим образом, но он не работает:
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? 'для e в наборе (S.edges()). difference (set (R.edges()): DIF.add_edge (e)' – Ward