多边python igraph问题

时间:2013-07-18 18:31:16

标签: python igraph

如果您有定向多边加权图,您如何做这些事情?

  1. 对于顶点I和J,列出从I到J的所有边。
  2. 删除图表中重量超过10的所有边。
  3. 对于1,我可以列出所有传出边,然后按目标节点过滤。这看起来可能效率低下,是否有某种方法直接获得边缘?对于2我可以列出所有边缘,查找每个权重,然后根据需要删除边缘。这样做是否有一种巧妙的惯用方式?

1 个答案:

答案 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()方法会删除边。