如何使用 igraph 和 python 添加有条件的边到对象属性
How to add edges that are conditional to object attribute using igraph and python
我的图表的节点是具有某些方法的实例。
我已经正确添加了节点,但现在我想检查这些节点是否具有相同的 group_id、add_edges。我正在使用 igraph
import igraph as ig
def making_graph(researchers):
g = ig.Graph()
for each in researchers:
for i in range(len(each)):
g.add_vertex(each[i])
g.vs[i]['researcher_id'] = each[i].get_researcher_id()
g.vs[i]['name'] = each[i].get_name()
g.vs[i]['sex'] = each[i].get_sex()
g.add_edges() # if researchers have the same group_id, add edge
return g
研究员的class是
class Researcher:
def __init__(self, group_id, research_id, name, tit, sex,
tot_nac_2011, tot_nac_2014, tot_int_2011, tot_int_2014, tot_bbl_2011, tot_bbl_2014):
self.group_id = group_id
self.research_id = research_id
self.name = name
self.tit = tit
self.sex = sex
self.producao = [tot_nac_2011, tot_nac_2014, tot_int_2011, tot_int_2014, tot_bbl_2011, tot_bbl_2014]
def get_group_id(self):
return self.group_id
def get_researcher_id(self):
return self.research_id
def get_sex(self):
return self.sex
当我调用 making_graph
时,我传递了一个包含研究人员列表的列表
已编辑。这也行不通。为什么?
def making_graph(researchers):
g = ig.Graph()
for each in researchers:
for i in range(len(each)):
g.add_vertex(each[i])
g.vs[i]['researcher_id'] = each[i].get_researcher_id()
g.vs[i]['name'] = each[i].get_name()
g.vs[i]['sex'] = each[i].get_sex()
for other in researchers:
for j in range(len(other)):
if each[i].get_group_id() == other[j].get_group_id():
g.add_edge([(g.vs[i], g.vs[j])])
return g
现在看来这确实有效:
def making_graph(researchers):
g = ig.Graph()
for each in researchers:
for i in range(len(each)):
g.add_vertex(each[i])
g.vs[i]['group_id'] = each[i].get_group_id()
g.vs[i]['researcher_id'] = each[i].get_researcher_id()
g.vs[i]['name'] = each[i].get_name()
g.vs[i]['sex'] = each[i].get_sex()
for v in g.vs:
for w in g.vs:
if v['group_id'] == w['group_id'] and v != w and g.are_connected(v, w) is False:
g.add_edge(v, w)
return g
我的图表的节点是具有某些方法的实例。 我已经正确添加了节点,但现在我想检查这些节点是否具有相同的 group_id、add_edges。我正在使用 igraph
import igraph as ig
def making_graph(researchers):
g = ig.Graph()
for each in researchers:
for i in range(len(each)):
g.add_vertex(each[i])
g.vs[i]['researcher_id'] = each[i].get_researcher_id()
g.vs[i]['name'] = each[i].get_name()
g.vs[i]['sex'] = each[i].get_sex()
g.add_edges() # if researchers have the same group_id, add edge
return g
研究员的class是
class Researcher:
def __init__(self, group_id, research_id, name, tit, sex,
tot_nac_2011, tot_nac_2014, tot_int_2011, tot_int_2014, tot_bbl_2011, tot_bbl_2014):
self.group_id = group_id
self.research_id = research_id
self.name = name
self.tit = tit
self.sex = sex
self.producao = [tot_nac_2011, tot_nac_2014, tot_int_2011, tot_int_2014, tot_bbl_2011, tot_bbl_2014]
def get_group_id(self):
return self.group_id
def get_researcher_id(self):
return self.research_id
def get_sex(self):
return self.sex
当我调用 making_graph
时,我传递了一个包含研究人员列表的列表
已编辑。这也行不通。为什么?
def making_graph(researchers):
g = ig.Graph()
for each in researchers:
for i in range(len(each)):
g.add_vertex(each[i])
g.vs[i]['researcher_id'] = each[i].get_researcher_id()
g.vs[i]['name'] = each[i].get_name()
g.vs[i]['sex'] = each[i].get_sex()
for other in researchers:
for j in range(len(other)):
if each[i].get_group_id() == other[j].get_group_id():
g.add_edge([(g.vs[i], g.vs[j])])
return g
现在看来这确实有效:
def making_graph(researchers):
g = ig.Graph()
for each in researchers:
for i in range(len(each)):
g.add_vertex(each[i])
g.vs[i]['group_id'] = each[i].get_group_id()
g.vs[i]['researcher_id'] = each[i].get_researcher_id()
g.vs[i]['name'] = each[i].get_name()
g.vs[i]['sex'] = each[i].get_sex()
for v in g.vs:
for w in g.vs:
if v['group_id'] == w['group_id'] and v != w and g.are_connected(v, w) is False:
g.add_edge(v, w)
return g