接続したいノードのリストから始めて、完全に接続されたサブグラフをnetworkxで生成する必要があります。基本的には、リスト内のすべてのノードを関数に渡して、すべての関数を互いに接続する必要があります。pythonのnetworkxモジュールを使ってノードリストからサブグラフを完全に生成する方法
これを達成するための組み込み関数があるのだろうか? または、私はいくつかのアルゴリズムを考えるべきですか?
ありがとうございました。
接続したいノードのリストから始めて、完全に接続されたサブグラフをnetworkxで生成する必要があります。基本的には、リスト内のすべてのノードを関数に渡して、すべての関数を互いに接続する必要があります。pythonの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()
機能があります完全に接続された(すなわち完全な)グラフを作成するために、ネームレー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's solutionをご覧ください。
networkxコマンドを使用すると、整数ノードを持つクリークを直接生成できます。次に、他のハッシュ可能な名前でノードを再ラベル付けする簡単なコマンドがあります。
import networkx as nx
L=["hello", "world", "how", "are", "you"]
G=nx.complete_graph(len(L))
nx.relabel_nodes(G,dict(enumerate(L)), copy = False) #if copy = True then it returns a copy.
ははい、私はこれらの順列/組み合わせの機能のために見ているはずです、ありがとう:) – Wilco
私は 'n個を交換したときにこれが私のために働い> '1'(L)でlenで> 1 ' – Rasmus
直接の方法があります。これを行うには 'nx.complete_graph'と' nx.relabel_nodes'を使います。私の答えを見てください。 – Joel