我有一个很大的(36k顶点,50k边)加权双峰二分图,我想生成一个投影,不仅像默认加权实现那样计算邻域,还要对边上的权重求和。您可以将其视为包含黑色顶点和蓝色顶点的二分图,我只想在只有蓝色顶点时保留原始图形权重。
我遇到的实现保留了橙色值,我对红色值感兴趣(或希望获得双重加权投影)。
到目前为止,我已经在igraph,networkx和python-tool看了一下,但到目前为止我只观察了投影计算边缘的数量。
Networkx method generic_weighted_projected_graph(B, nodes, weight_function=None)可能会使这个可行但我无法看到(sna对我来说是新的,虽然我是一个如此蟒蛇的用户)。
答案 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})]