Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Networkx:如何在优化图编辑距离中使用节点匹配参数?_Python_Graph_Networkx - Fatal编程技术网

Python 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_

我试图借助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_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'只是字典,每个字典都有所有节点的属性,因此您不受如何使用它来比较节点的限制)。