26

マルチグラフオブジェクトがあり、それを重み付きエッジを持つ単純なグラフオブジェクトに変換したいと思います。networkxのドキュメントを調べましたが、これを実現するための組み込み関数が見つからないようです。この目標を達成できるnetworkxの組み込み関数を誰かが知っているかどうか疑問に思っていました。to_directed()、to_undirected()関数を見ましたが、それらは私の目標を果たしていません。

4

3 に答える 3

33

これを行う非常に簡単な方法の1つは、マルチグラフをへの入力として渡すことGraphです。

import networkx as nx

G = nx.MultiGraph()
G.add_nodes_from([1,2,3])
G.add_edges_from([(1, 2), (1, 2), (1, 3), (2, 3), (2, 3)])

G2 = nx.Graph(G)

これにより、マルチグラフの無向グラフが作成され、複数のエッジが単一のエッジにマージされます。ただし、マージされるエッジに異なる属性がある場合、どの属性が保持されるかを決定する方法があるかどうかはわかりません。

于 2013-03-23T21:19:47.407 に答える
28

重みを合計して、重み付きマルチグラフから重み付きグラフを作成する 1 つの方法を次に示します。

import networkx as nx
# weighted MultiGraph
M = nx.MultiGraph()
M.add_edge(1,2,weight=7)
M.add_edge(1,2,weight=19)
M.add_edge(2,3,weight=42)

# create weighted graph from M
G = nx.Graph()
for u,v,data in M.edges(data=True):
    w = data['weight'] if 'weight' in data else 1.0
    if G.has_edge(u,v):
        G[u][v]['weight'] += w
    else:
        G.add_edge(u, v, weight=w)

print(G.edges(data=True))
# [(1, 2, {'weight': 26}), (2, 3, {'weight': 42})]
于 2013-03-24T12:09:52.020 に答える
-6

igraph ライブラリを使用できます。ここから Python 拡張モジュールをダウンロードします: http://igraph.sourceforge.net/download.html

于 2013-03-23T19:43:33.640 に答える