0

如果你有一个有向多边加权图,你是怎么做这些事情的?

  1. 对于顶点 I 和 J,列出从 I 到 J 的所有边。
  2. 删除图中权重大于 10 的所有边。

对于 1,我可以列出所有传出边,然后按目标节点过滤。这似乎可能效率低下,是否有某种方法可以直接获得边缘?对于 2,我可以列出所有边,查找每个权重,然后在需要时删除边。有没有一种简洁的惯用方式来做到这一点?

4

1 回答 1

4

至于#1,不幸的是,没有比您提到的更简单的解决方案(即查询所有传出边缘,然后根据目的地进行过滤)。igraph 的 C 核心有一个函数igraph_get_eids_multi,它可以做你想做的事情,但没有对应的 Python 接口。

至于#2,您可以这样做(假设这g是您的图形对象,weight是保存权重的边缘属性的名称,并且gt代表“大于”):

g.es.select(weight_gt=10).delete()

whereg.es表示整个图的边序列,它的select方法根据一些条件对边序列进行子集化(EdgeSeq.select更多细节参见 的文档),返回另一个EdgeSeq. 然后过滤边缘序列的delete()方法删除边缘。

于 2013-07-19T15:30:20.593 回答