7

2 つの質問があります。

  1. 無向グラフで最大の連結成分を見つけたい。そして、networkX の API ドキュメントを読んで、この関数を見つけまし nx.connected_component_subgraphs()た。しかし、その戻り値はジェネレーターであり、最大の接続コンポーネントのサブグラフを導出できないため、使用方法がわかりません。

  2. ひとつと同じです。しかし、グラフは有向です。そして、有向グラフの最大の弱連結成分を見つけたいです。したがって、nx.weakly_connected_component_subgraphs()この関数を使用します。質問1にも同じ問題があります。

networkX の組み込み関数を使用して、無向グラフで最大の連結成分と有向グラフで最大の弱連結成分を見つけるにはどうすればよいですか?

NetworkX 1.9.1 を使用しています。

4

2 に答える 2

7

NetworkX コンポーネント関数は Python ジェネレーターを返します。listPython関数を使用して、ジェネレーターでアイテムのリストを作成できます。これを示す例と、最大の弱連結成分を見つける例を次に示します。

In [1]: import networkx as nx

In [2]: G = nx.DiGraph()

In [3]: G.add_path([1,2,3,4])

In [4]: G.add_path([10,11,12])

eg list を使用して、ジェネレーターをサブグラフのリストに変えることができます。

In [5]: list(nx.weakly_connected_component_subgraphs(G))
Out[5]: 
[<networkx.classes.digraph.DiGraph at 0x278bc10>,
 <networkx.classes.digraph.DiGraph at 0x278ba90>]

lenmax 演算子は、各サブグラフで len(g) を呼び出してノードの数を計算するPython 関数に設定できるキー引数を取ります。したがって、作成できる最大数のノードを持つコンポーネントを取得するには

In [6]: largest = max(nx.weakly_connected_component_subgraphs(G),key=len)

In [7]: largest.nodes()
Out[7]: [1, 2, 3, 4]

In [8]: largest.edges()
Out[8]: [(1, 2), (2, 3), (3, 4)]
于 2014-10-07T18:35:56.527 に答える