接続したいノードのリストから始めて、networkxで完全に接続されたサブグラフを生成する必要があります。基本的に、関数に渡すリスト内のすべてのノードがすべて相互に接続されるようにします。
これを達成するための組み込み関数があるのだろうか(私は見つけていない)?または、何らかのアルゴリズムを考えるべきですか?
どうもありがとうございました。
これを行うメソッドはわかりませんが、networkx の complete_graph() メソッドを簡単に模倣して、わずかに変更することができます (ほぼビルトインのように):
import networkx
import itertools
def complete_graph_from_list(L, create_using=None):
G = networkx.empty_graph(len(L),create_using)
if len(L)>1:
if G.is_directed():
edges = itertools.permutations(L,2)
else:
edges = itertools.combinations(L,2)
G.add_edges_from(edges)
return G
S = complete_graph_from_list(["a", "b", "c", "d"])
print S.edges()
完全に接続された (完全な) グラフを作成する関数 nameley がありcomplete_graph
ます。
import networkx as nx
g = nx.complete_graph(10)
整数の引数 (グラフ内のノードの数) を取るため、ノード ラベルを制御することはできません。私はそれを自動的に行うための関数を見つけていませんが、itertools
それは十分に簡単です:
from itertools import combinations
nodes = ['A', 'B', 'C', 'D', 'E']
edges = combinations(nodes, 2)
g = nx.Graph()
g.add_nodes_from(nodes)
g.add_edges_from(edges)
combinations(nodes, 2)
nodes
グラフのエッジとして機能するすべてのペアの組み合わせで 2 要素のタプルを作成します。
ただし、このソリューションは無向グラフに対してのみ有効です。より一般的なアプローチについては、zubinmehta のソリューションをご覧ください。