如何使用igraph和python将有条件的边添加到对象属性

2024-03-29 02:24:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我的图的节点是有一些方法的实例。 我已经正确地添加了节点,但是现在我要检查,对于那些节点,如果它们具有相同的组id,请添加边。我在用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 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

Tags: nameinselfaddidforgetdef
1条回答
网友
1楼 · 发布于 2024-03-29 02:24:07

现在看来,这是可行的:

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

相关问题 更多 >