在igraph中基于源/目标选择边

时间:2013-01-29 23:28:20

标签: python igraph

有没有一种简单的方法可以根据igraph中的源和目标选择/删除边缘?

我正在使用的基本上是

g.es["source"] = [e.source for e in g.es]
g.es["target"] = [e.target for e in g.es]    
g.es["tuple"]  = [e.tuple  for e in g.es]        

g.es.select(target=root)

但我觉得应该有一种方法可以做到这一点,而无需两次存储源/目标信息。

2 个答案:

答案 0 :(得分:13)

只需使用_source=whatever_target=whatever作为select的关键字参数,例如:

g.es.select(_source=root)

或者,您可以使用图表的incident方法,该方法为您提供边缘ID列表,而不是过滤后的EdgeSeq,如果这更适合您的目的:

g.incident(root, mode="out")

答案 1 :(得分:2)

BTW,对于'元组',你想使用_between

g.es.find(_between=((source_id,), (target_id,)))

看起来很奇怪 - 如果你使用select代替find,并传入带有多个索引的元组,你实际上会得到一个边列表而不是一个边。但是对于单个边缘,还必须通过一个元组来开始和结束。

由于某些原因(比使用_source_target的组合快3个数量级,速度快得多),但提供完全相同的信息。