6

NetworkX に有向グラフがあります。エッジには 0 から 1 の重みが付けられ、エッジが発生する確率を表します。ネットワークの接続性は非常に高いので、ノードごとにエッジを刈り込み、最も確率の高いノードだけが残るようにします。

in_edgesすべてのノードを反復処理して、グラフに最も重み付けされたものだけを保持する方法がわかりません。これを可能にする networkx 関数はありますか?

これが私ができるようにしたいことの例です。

Nodes:
A, B, C, D

Edges:
A->B, weight=1.0
A->C, weight=1.0
A->D, weight=0.5
B->C, weight=0.9
B->D, weight=0.8
C->D, weight=0.9

Final Result Wanted:
A->B, weight=1.0
A->C, weight=1.0
C->D, weight=0.9

ノードに 2 つのエッジがあり、どちらも重みが最も高い場合、両方を保持したいと思います。

4

3 に答える 3

7

私が持っていた解決策は、Aric に触発されました。次のコードを使用しました。

for node in G.nodes():
    edges = G.in_edges(node, data=True)
    if len(edges) > 0: #some nodes have zero edges going into it
        min_weight = min([edge[2]['weight'] for edge in edges])
        for edge in edges:
            if edge[2]['weight'] > min_weight:
                G.remove_edge(edge[0], edge[1])
于 2013-08-14T20:29:08.887 に答える