Python Networkx:如何在优化图编辑距离中使用节点匹配参数?
我试图借助NetworkX上的Python Networkx:如何在优化图编辑距离中使用节点匹配参数?,python,graph,networkx,Python,Graph,Networkx,我试图借助NetworkX上的optimize\u graph\u edit\u distance算法比较两个图: optimize_graph_edit_distance(G1, G2, node_match=None, node_subst_cost=None, edge_match=None, node_del_cost=None, edge_subst_cost=None, edge_del_cost=None, edge_ins_
optimize\u graph\u edit\u distance
算法比较两个图:
optimize_graph_edit_distance(G1, G2,
node_match=None,
node_subst_cost=None,
edge_match=None,
node_del_cost=None,
edge_subst_cost=None,
edge_del_cost=None,
edge_ins_cost=None,
upper_bound=None)
我以字典的形式给两个图上的每个节点赋予了一定数量的属性,在node\u match
的帮助下,我可以指定在匹配过程中是否应该将节点N1和N2视为相等
函数节点\u match
的调用方式如下:
node_match(G1.nodes[n1], G2.nodes[n2]) >>n1 and n2 are node attribute dictionaries as input.
我的问题是每个图中有多个节点。因此,如何给函数“所有其他属性字典”以比较所有其他节点?
node\u match
是一个函数,如果G1中的节点n1和G2中的节点n2在匹配过程中应被视为相等,则该函数将返回True。例如:
import networkx as nx
G1 = nx.DiGraph()
G1.add_nodes_from([(0, {'label':'a'}), (1, {'label':'b'}),(2, {'label':'c'})])
G1.add_edges_from([(0,1),(0,2)])
G2 = nx.DiGraph()
G2.add_nodes_from([(3, {'label':'a'}), (4, {'label':'b'}),(5, {'label':'c'})])
G2.add_edges_from([(3,4),(3,5)])
print(G1.nodes())
print(G1.edges())
print(G2.nodes())
print(G2.edges())
for dist in nx.algorithms.similarity.optimize_graph_edit_distance(G1, G2, node_match=lambda a,b: a['label'] == b['label']):
print(dist)
这里,即使两个图中的节点标识符不同,距离也将为零。这是因为我们将比较两个节点的函数定义为lambda,b:a['label']==b['label']
,这意味着如果两个节点具有相同的“label”值,则在匹配过程中认为它们相等
类似地,您可以实现任何想要实现的逻辑,而无需特别处理图中的每一对节点。谢谢!有道理。是否可以将多个节点与多个属性进行比较?比较总是在多对节点之间进行(函数应决定是否为同一节点),并且您可以根据多个属性定义逻辑('a'和'b'只是字典,每个字典都有所有节点的属性,因此您不受如何使用它来比较节点的限制)。