2014-12-03 43 views
1

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

enter image description here

我碰到的实现保持橘子的价值,我很感兴趣的红色(或希望得到双加权投影)。

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

Networkx method generic_weighted_projected_graph(B, nodes, weight_function=None)可能会使这个可行,但我不明白怎么样(sna对我来说是新的,虽然我是如此如此的python用户)。

回答

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})] 
+0

哇>(我猜我误解的代码有感谢您指出了这一点 – 2014-12-04 20:57:16

+0

如果有人碰到这个都用相同的!问题,一定要检查该图是否是无向的(即它试图应用二分投影)。虽然igraph忽略它是否被定向并继续投影,但这只会返回一个空节点列表。在可以调用G2 = G.to_undirected()的图上它无方向并解决问题。 – 2014-12-05 00:21:34