有没有一种方法可以将边缘属性用作图形层次结构中的占位符?

时间:2019-01-08 09:47:08

标签: python networkx hierarchy

我正在使用基于networkx的图形库的python脚本。我创建了一个层次结构,其中包含相互键入的不同图形。在其中一张图中,我希望边缘具有属性,例如名称。当我这样做时,我收到一条消息说同构性已破坏,因为键入它的图形不具有完全相同的边属性。

我知道这可能不是设计regraph的目的,但是有没有一种方法可以在层次结构的图形中指定边属性,或者是一种既考虑模式又考虑节点名称的规则?

我已经尝试过将空属性添加到层次结构中的其他图形,这是行不通的。

hierarchy = rg.NetworkXHierarchy()

g_type = nx.DiGraph()
g_type.add_nodes_from(['list', 'number'])
g_type.add_edges_from([('list', 'number')])

g_obj = nx.DiGraph()
g_obj.add_nodes_from(['A', 'a'])
rg.add_edge(g_obj, 'A', 'a', attrs={'name': 'input'})

hierarchy.add_graph('type', g_type)
hierarchy.add_graph('obj', g_obj)

hierarchy.add_typing('obj', 'type', {'A': 'list', 'a': 'number'})

我希望图的边缘具有属性名称,但这会导致同构错误。

1 个答案:

答案 0 :(得分:0)

对于有兴趣的人,这是我设法解决问题的方法:

hierarchy = rg.NetworkXHierarchy()

g_type = nx.DiGraph()
g_type.add_nodes_from(['list', 'number'])
g_type.add_edges_from([('list', 'number')])
rg.add_edge_attr(g_type, 'list', 'number', attrs={'name': rg.UniversalSet()})

g_obj = nx.DiGraph()
g_obj.add_nodes_from(['A', 'a'])
rg.add_edge(g_obj, 'A', 'a', attrs={'name': 'input'})

hierarchy.add_graph('type', g_type)
hierarchy.add_graph('obj', g_obj)

hierarchy.add_typing('obj', 'type', {'A': 'list', 'a': 'number'})

您只需添加具有rg.UniversalSet作为值的相同属性。