我是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 --
提前谢谢
答案 0 :(得分:7)
graph_like.delete_edges("weight"==0)
不起作用,因为它评估如下:
Python评估"weight" == 0
,它是字符串"weight"
与数字零的比较。此比较结果为False
,类型为bool
。
然后将上述表达式的结果输入graph_like.delete_edges()
,它需要边缘ID列表作为其第一个参数。由于边ID是整数,它会将False
转换为整数,使其等于零,然后igraph删除ID为零的边。
而不是那样,你需要选择零重量的所有边缘:
graph_like.es.select(weight=0)
其中graph_like.es
表示图的边缘序列(即所有边缘的顺序),并且其select()
方法基于某些标准限制边缘序列。在此处,weight=0
是select()
的关键字参数(请注意,weight
和0
之间只有一个等号,weight
此处不是字符串)。上述表达式的结果是所有具有零权重的边的序列。然后,您只需调用此边序列的delete()
方法:
graph_like.es.select(weight=0).delete()