查找具有相同边属性的所有顶点

2024-07-04 15:44:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过使用Igraph找到共享相同边属性的所有顶点(顶点id)(因此可能有大量这样的顶点)。当我想找到“道路”上的所有“村庄”(我的图形的顶点)时,这将非常方便,比如“route69”(一个边属性)。在

在Igraph中有没有一种简单的方法可以做到这一点?也许我把它复杂化了。在

实际上我需要的是相反的:g.es.select(_within=g.vs[2:5])或者

>>> men = g.vs.select(gender="m")
>>> women = g.vs.select(gender="f")
>>> g.es.select(_between=(men, women))

因为我知道边属性,但不知道顶点。在

我将选择边并希望它将返回所有相关的顶点。在

也许我只是现在累了,但我找不到解决这个问题的办法。如果有人用正确的方法帮助我,我很感激。或者我在tutorial和文档中遗漏了一个方法。闻起来有一种非常简单的方法。提前感谢您的任何建议!


Tags: 方法id图形属性esgenderselectvs
2条回答

您应该能够执行以下操作:

r69edges = g.es.select(name_eq='Route69')  #Select all edges where name=='Route69'
sg = r69edges.subgraph()  #Create a subgraph containing only the selected edges (and attached vertices)
village_verts = sg.vs.select(name_eq='villages')  #Select the vertices where name=='villages'

这假设'villages'和'Route69'存储在顶点和边上名为'name'的属性中。。。适当调整以匹配您的属性。在

当然-如果你想的话,你可以把这些都压缩成一行:

^{pr2}$

不确定这是否是最有效的方法(虽然我在文档中没有看到任何捷径),但它应该能让你得到你想要的。在

首先,选择管线69上的所有边:

edges = g.es.select(name="Route69")

然后迭代选定的边并收集顶点的端点:

^{pr2}$

这将为您提供一个集合,其中包含至少一条边上以名称Route69入射的所有顶点的顶点id。如果需要VertexSeq,只需执行以下操作:

vertices = g.vs[sorted(vertices)]

相关问题 更多 >

    热门问题