classes.py 文件源码

python
阅读 31 收藏 0 点赞 0 评论 0

项目:binet 作者: crisjf 项目源码 文件源码
def _project_NK(self,side):
        """
        Builds the projection of the bipartite network on to the chosen side.
        The projection is done using the NK conditional probability.

        Parameters
        ----------
        side : int or str
            Tags for each side of the bipartite network.
        """
        self._check_side(side)
        aside = self.side if side == self.aside else self.aside

        E = self.recombination_ease(aside)
        net = self.edges(as_df=True)[[side,aside]]
        nodes = merge(E,net).groupby(side).sum()[['E']].reset_index().reset_index().rename(columns={'index':side+'_index'})

        dis = merge(E,merge(net,net,how='inner',left_on=aside,right_on=aside))
        dis = dis.groupby([side+'_x',side+'_y']).sum()[['E']].reset_index().rename(columns={'E':'E_both'})
        dis = merge(dis,nodes,how='left',right_on=side,left_on=side+'_x').drop(side,1)
        dis = merge(dis,nodes,how='left',right_on=side,left_on=side+'_y').drop(side,1)
        dis = dis[dis[side+'_index_x']>dis[side+'_index_y']].drop([side+'_index_x',side+'_index_y'],1)
        dis['p_x'] = dis['E_both']/dis['E_x'].astype(float)
        dis['p_y'] = dis['E_both']/dis['E_y'].astype(float)
        dis['fi'] = dis[['p_x','p_y']].min(1)
        dis = dis[[side+'_x',side+'_y','fi']]

        self.P[side] = gGraph(node_id=side)
        self.P[side].add_weighted_edges_from([val[1:] for val in dis.itertuples()])
        nodes = merge(self.P[side].nodes(as_df=True),self.nodes(side,as_df=True),how='left')
        properties = nodes.columns.values.tolist()
        properties.remove(side)
        for prop in properties:
            values = dict(zip(nodes[side].values,nodes[prop].values))
            set_node_attributes(self.P[side],prop,values)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号