2014-12-03 44 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