如何在igraph python中删除具有特定权重的所有边缘?

时间:2015-03-09 16:46:53

标签: python igraph

我是Python的新手,很抱歉,如果这很简单,我正在尝试删除其edgesweight的所有zero但是使用此代码我只能删除一次一个边缘,如何将它删除所有边缘?

 ig.summary(graph_like)
IGRAPH D-W- 5390 40276 -- 
graph_like.delete_edges("weight"==0);
ig.summary(graph_like)
IGRAPH D-W- 5390 40275 -- 

提前谢谢

1 个答案:

答案 0 :(得分:7)

graph_like.delete_edges("weight"==0)不起作用,因为它评估如下:

  1. Python评估"weight" == 0,它是字符串"weight"与数字零的比较。此比较结果为False,类型为bool

  2. 然后将上述表达式的结果输入graph_like.delete_edges(),它需要边缘ID列表作为其第一个参数。由于边ID是整数,它会将False转换为整数,使其等于零,然后igraph删除ID为零的边。

  3. 而不是那样,你需要选择零重量的所有边缘:

    graph_like.es.select(weight=0)
    

    其中graph_like.es表示图的边缘序列(即所有边缘的顺序),并且其select()方法基于某些标准限制边缘序列。在此处,weight=0select()的关键字参数(请注意,weight0之间只有一个等号,weight此处不是字符串)。上述表达式的结果是所有具有零权重的边的序列。然后,您只需调用此边序列的delete()方法:

    graph_like.es.select(weight=0).delete()