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

aca*_*ser 1 python igraph

我是新来的Python很抱歉,如果这是如此简单,我想删除所有edges这些的weight就是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 -- 
Run Code Online (Sandbox Code Playgroud)

先感谢您

Tam*_*más 7

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

  1. Python计算"weight" == 0,这是字符串"weight"与数字零的比较.这种比较的结果是False类型的值bool.

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

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

graph_like.es.select(weight=0)
Run Code Online (Sandbox Code Playgroud)

where graph_like.es表示图的边缘序列(即所有边缘按顺序),并且其select()方法基于某些标准限制边缘序列.这里weight=0是一个关键字参数select()(注意,这里只有一个等号weight,0而且weight这里不是一个字符串).上述表达式的结果是所有具有零权重的边的序列.然后你可以简单地调用delete()这个边序列的方法:

graph_like.es.select(weight=0).delete()
Run Code Online (Sandbox Code Playgroud)