add_edge 在 igraph 中导致自循环而不是新边

add_edge in igraph resulting in self-loop instead of new edge

我有两个不同的图表:g1 和 g2。我想将它们加在一起并创建一些边缘。为什么这不起作用?

import igraph

def edging_up(g1, g2):
    g = g1 + g2
    for v in g.vs:
        for w in g.vs:
            try:
                if v['name'].get_researcher_id() == w['name'].get_tutor_id():
                    g.add_edge(v, w)
            except:
                pass

    return g

我需要 try/exception 因为一张图没有 get_tutor_id() 方法。 我也试过了

def edging_up(g1, g2):
    g = g1 + g2
    for v in g1.vs:
        for w in g2.vs:
            if v['name'].get_researcher_id() == w['name'].get_tutor_id():
                    g.add_edge(v, w)
    return g

然后,它起作用了,但不是从 v 到 w 添加一条边,而是向 v 添加了一个自循环。

第二个示例不起作用,因为 wg2 中的一个顶点,而您正试图在 g 中添加一条边。 igraph returns 的顶点对象实际上只是顶点索引的代理,因此当您 运行 g.add_edge(v, w) 时,igraph 将简单地检索 vindex 属性并且w 然后本质上是 运行 g.add_edge(v.index, w.index),这在 g 的上下文中没有意义(因为索引指的是 g1g2 , 分别).

关于第一个例子,你需要提供更多的信息;例如,name 顶点属性包含什么?