加权双模二分图投影保留原始权重

时间:2014-12-03 06:40:14

标签: python-2.7 igraph networkx bipartite sna

我有一个很大的(36k顶点,50k边)加权双峰二分图,我想生成一个投影,不仅像默认加权实现那样计算邻域,还要对边上的权重求和。您可以将其视为包含黑色顶点和蓝色顶点的二分图,我只想在只有蓝色顶点时保留原始图形权重。

enter image description here

我遇到的实现保留了橙色值,我对红色值感兴趣(或希望获得双重加权投影)。

到目前为止,我已经在igraph,networkx和python-tool看了一下,但到目前为止我只观察了投影计算边缘的数量。

Networkx method generic_weighted_projected_graph(B, nodes, weight_function=None)可能会使这个可行但我无法看到(sna对我来说是新的,虽然我是一个如此蟒蛇的用户)。

1 个答案:

答案 0 :(得分:1)

您在https://networkx.github.io/documentation/latest/reference/generated/networkx.algorithms.bipartite.projection.generic_weighted_projected_graph.html中引用的文档中有一个示例,说明如何正确执行此操作。

它是这样的:

import networkx as nx
from networkx.algorithms import bipartite

edges = [('A1','B1',3),
         ('A1','B2',7),
         ('A2','B1',2),
         ('A2','B2',4),
         ]

B = nx.Graph()
B.add_weighted_edges_from(edges)

def my_weight(G, u, v, weight='weight'):
    w = 0
    for nbr in set(G[u]) & set(G[v]):
        w += G.edge[u][nbr].get(weight, 1) + G.edge[v][nbr].get(weight,1)
    return w

G = bipartite.generic_weighted_projected_graph(B, ['A1', 'A2'], weight_function=my_weight)


print G.edges(data=True)

输出

[('A1', 'A2', {'weight': 16})]