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 添加了一个自循环。
第二个示例不起作用,因为 w
是 g2
中的一个顶点,而您正试图在 g
中添加一条边。 igraph returns 的顶点对象实际上只是顶点索引的代理,因此当您 运行 g.add_edge(v, w)
时,igraph 将简单地检索 v
的 index
属性并且w
然后本质上是 运行 g.add_edge(v.index, w.index)
,这在 g
的上下文中没有意义(因为索引指的是 g1
和 g2
, 分别).
关于第一个例子,你需要提供更多的信息;例如,name
顶点属性包含什么?
我有两个不同的图表: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 添加了一个自循环。
第二个示例不起作用,因为 w
是 g2
中的一个顶点,而您正试图在 g
中添加一条边。 igraph returns 的顶点对象实际上只是顶点索引的代理,因此当您 运行 g.add_edge(v, w)
时,igraph 将简单地检索 v
的 index
属性并且w
然后本质上是 运行 g.add_edge(v.index, w.index)
,这在 g
的上下文中没有意义(因为索引指的是 g1
和 g2
, 分别).
关于第一个例子,你需要提供更多的信息;例如,name
顶点属性包含什么?