在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 个回答
2
顺便说一下,对于“元组”,你应该使用 _between
:
g.es.find(_between=((source_id,), (target_id,)))
这看起来有点奇怪——如果你用 select
而不是 find
,并传入多个索引的元组,你实际上会得到一系列边,而不是单独的一条边。不过,如果你只想要一条边,还是得传入一个表示起点和终点的元组。
出于某种原因,这种方式要快得多(快了大约三倍!),但得到的信息却是完全一样的。
13
只需将 _source=whatever
和 _target=whatever
作为关键字参数传递给 select
方法,比如:
g.es.select(_source=root)
另外,你也可以使用图的 incident
方法,这样可以得到一份边的ID列表,而不是过滤后的 EdgeSeq
,如果这样更适合你的需求的话:
g.incident(root, mode="out")