Python igraph:从图中删除顶点
Python igraph: delete vertices from a graph
我正在使用 enron 电子邮件数据集,我正在尝试删除没有“@enron.com”的电子邮件地址(即我只想使用 enron 电子邮件)。当我试图删除那些没有@enron.com 的地址时,一些电子邮件由于某些原因被跳过了。下面显示了一个小图,其中顶点是电子邮件地址。这是 gml 格式:
Creator "igraph version 0.7 Sun Mar 29 20:15:45 2015"
Version 1
graph
[
directed 1
node
[
id 0
label "csutter@enron.com"
]
node
[
id 1
label "steve_williams@eogresources.com"
]
node
[
id 2
label "kutner.stephen@enron.com"
]
node
[
id 3
label "igsinc@ix.netcom"
]
node
[
id 4
label "dbn@felesky.com"
]
node
[
id 5
label "cheryltd@tbardranch.com"
]
node
[
id 6
label "slover.eric@enron.com"
]
node
[
id 7
label "alkeister@yahoo.com"
]
node
[
id 8
label "econnors@mail.mainland.cc.tx.us"
]
node
[
id 9
label "jafry@hotmail.com"
]
edge
[
source 5
target 5
weight 1
]
]
我的代码是:
G = ig.read("enron_email_filtered.gml")
for v in G.vs:
print v['label']
if '@enron.com' not in v['label']:
G.delete_vertices(v.index)
print 'Deleted'
在此数据集中,应删除 7 封电子邮件。但是,根据上面的代码,只删除了 5 封电子邮件。
从教程here,您可以访问具有特定属性的所有顶点,然后按如下方式批量删除它们:
to_delete_ids = [v.index for v in G.vs if '@enron.com' not in v['label']]
G.delete_vertices(to_delete_ids)
这是我得到的输出:
to delete ids: [1, 3, 4, 5, 7, 8, 9]
Before deletion: IGRAPH D-W- 10 1 --
+ attr: id (v), label (v), weight (e)
+ edges:
5->5
After deletion: IGRAPH D-W- 3 0 --
+ attr: id (v), label (v), weight (e)
label: csutter@enron.com
label: kutner.stephen@enron.com
label: slover.eric@enron.com
我正在使用 enron 电子邮件数据集,我正在尝试删除没有“@enron.com”的电子邮件地址(即我只想使用 enron 电子邮件)。当我试图删除那些没有@enron.com 的地址时,一些电子邮件由于某些原因被跳过了。下面显示了一个小图,其中顶点是电子邮件地址。这是 gml 格式:
Creator "igraph version 0.7 Sun Mar 29 20:15:45 2015"
Version 1
graph
[
directed 1
node
[
id 0
label "csutter@enron.com"
]
node
[
id 1
label "steve_williams@eogresources.com"
]
node
[
id 2
label "kutner.stephen@enron.com"
]
node
[
id 3
label "igsinc@ix.netcom"
]
node
[
id 4
label "dbn@felesky.com"
]
node
[
id 5
label "cheryltd@tbardranch.com"
]
node
[
id 6
label "slover.eric@enron.com"
]
node
[
id 7
label "alkeister@yahoo.com"
]
node
[
id 8
label "econnors@mail.mainland.cc.tx.us"
]
node
[
id 9
label "jafry@hotmail.com"
]
edge
[
source 5
target 5
weight 1
]
]
我的代码是:
G = ig.read("enron_email_filtered.gml")
for v in G.vs:
print v['label']
if '@enron.com' not in v['label']:
G.delete_vertices(v.index)
print 'Deleted'
在此数据集中,应删除 7 封电子邮件。但是,根据上面的代码,只删除了 5 封电子邮件。
从教程here,您可以访问具有特定属性的所有顶点,然后按如下方式批量删除它们:
to_delete_ids = [v.index for v in G.vs if '@enron.com' not in v['label']]
G.delete_vertices(to_delete_ids)
这是我得到的输出:
to delete ids: [1, 3, 4, 5, 7, 8, 9]
Before deletion: IGRAPH D-W- 10 1 --
+ attr: id (v), label (v), weight (e)
+ edges:
5->5
After deletion: IGRAPH D-W- 3 0 --
+ attr: id (v), label (v), weight (e)
label: csutter@enron.com
label: kutner.stephen@enron.com
label: slover.eric@enron.com