有没有办法在一系列顶点移除后保留或跟踪顶点对应关系
Is there a way to preserve or track vertex correspondence after a series of vertex removals
在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 字典查找相同。
就其价值而言,顶点重新编号是底层 C 库的 属性,因此 Python 接口对此无能为力。
在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 字典查找相同。
就其价值而言,顶点重新编号是底层 C 库的 属性,因此 Python 接口对此无能为力。