在python-igraph中,在我看来,当你从图形中删除顶点时,顶点被重命名为使用从0到n
的连续顶点。
要了解我的意思,请考虑以下程序:
from igraph import Graph
g=Graph.Full(4) # Vertex set is {0..3}
print g.neighbors(2) # Prints [0,1,3]
g.delete_vertices([1])
print g.neighbors(2) # Prints [0,1], but I'd want [0,3]
我可以自己动手簿记,但这已经在图书馆得到了支持吗?基本上,我想知道在一系列顶点删除之后,新重命名的顶点在原始图中对应的内容(就像上面的代码片段一样)。
最简单的方法是使用name
顶点属性来跟踪对应关系。基本上,如果为顶点指定名称,则可以在以后igraph要求数字顶点ID的位置使用名称:
>>> g.vs["name"] = ["V{0}".format(i) for i in range(4)]
>>> g.vs[g.neighbors("V2")]["name"]
['V0', 'V1', 'V3']
>>> g.delete_vertices(["V1"])
>>> g.vs[g.neighbors("V2")]["name"]
['V0', 'V3']
name
属性在幕后索引,因此按名称查找顶点应具有与典型Python dict查找相同的时间复杂度。
对于它的价值,顶点重新编号是底层C库的一个属性,因此Python接口可以做的事情并不多。