3

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

在此处输入图像描述

我遇到的实现保持橙色值,我对红色感兴趣(或者希望得到一个双加权投影)。

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

Networkx 方法 generic_weighted_projected_graph(B, nodes, weight_function=None)可能使这个可行,但我看不出如何(sna 对我来说是新的,虽然我是一个如此 Python 的用户)。

4

1 回答 1

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})]
于 2014-12-04T17:51:31.690 回答