4つのノードを持つNetworkXグラフがあります(a,b,c,d)
部分的に接続されています。 2つのノードが隣接しているかどうかを確認するにはどうすればよいですか?例:a
とd
が隣接していないことをどのように主張できますか?
import networkx as nx
G=nx.Graph()
G.add_Edge('a','b',weight=1)
G.add_Edge('a','c',weight=1)
G.add_Edge('c','d',weight=1)
次のことを試しましたが、失敗しました。
nx.is_connected(G) # I assume it checks whether edges are connected at all
nx.connected_components(G) # outputs an object that I can make no use of
2つのノードがNetworkXに接続されているかどうかを確認する1つの方法は、ノードu
が別のノードv
のネイバーであるかどうかを確認することです。
_>>> def nodes_connected(u, v):
... return u in G.neighbors(v)
...
>>> nodes_connected("a", "d")
False
>>> nodes_connected("a", "c")
True
_
_networkx.is_connected
_ は、グラフGのすべてのノードがGの他のすべてのノードから到達可能かどうかをチェックすることに注意してください。これは、Gに1つの連結成分があると言うことと同じです(つまり、len(nx.connected_components(G)) == 1
)。
これが推奨される方法です。
import networkx as nx
G=nx.Graph()
G.add_Edge('a','b',weight=1)
G.add_Edge('a','c',weight=1)
G.add_Edge('c','d',weight=1)
print(G.has_Edge('a','d')) # False
print('d' in G['a']) # False, faster
print('d' not in G['a']) # True
「2つのノードが互いに到達可能であることを知る方法」について質問されたと思います。これはこのコードで解決できます。
networkx.algorithms.descendants(G, target_nodes)
G
のtarget_nodes
から到達可能なすべてのノードを返します。