如果您有定向多边加权图,您如何做这些事情?
对于1,我可以列出所有传出边,然后按目标节点过滤。这看起来可能效率低下,是否有某种方法直接获得边缘?对于2我可以列出所有边缘,查找每个权重,然后根据需要删除边缘。这样做是否有一种巧妙的惯用方式?
答案 0 :(得分:4)
对于#1,遗憾的是没有比你提到的更简单的解决方案(即查询所有传出边缘,然后根据目的地进行过滤)。 igraph的C核心有一个名为igraph_get_eids_multi
的函数可以做你想做的事,但是函数没有相应的Python接口。
对于#2,您可以这样做(假设g
是您的图表对象,weight
是包含权重的边缘属性的名称,gt
代表“大于“):
g.es.select(weight_gt=10).delete()
其中g.es
表示整个图的边序列,其select
方法根据某些条件对边序列进行子集(有关详细信息,请参阅EdgeSeq.select
的文档),返回另一个EdgeSeq
。然后,过滤后的边缘序列的delete()
方法会删除边。