6

グラフから 2 つのノードを抽出したいのですが、問題はそれらが接続されるべきではないということです。つまり、それらの間に直接的なエッジが存在しません。「random.choice(g.edges())」を使用してランダムなエッジを取得できることはわかっていますが、これにより、接続されているランダムなノードが得られます。接続されていないノードのペア (接続されていないエッジのペア) が必要です。みんな助けて...ありがとう

4

4 に答える 4

10

単純!:)

ランダムノードを取得します。次に、ネイバーとそれ自体を除くノードのリストからランダムノードを選択します。説明するコードは以下のとおりです。:)

import networkx as nx
from random import choice

# Consider this graph
#
#     3
#     |
# 2 - 1 - 5 - 6
#     | 
#     4

g = nx.Graph()
g.add_edge(1,2)
g.add_edge(1,3)
g.add_edge(1,4)
g.add_edge(1,5)
g.add_edge(5,6)

first_node = choice(g.nodes())                  # pick a random node
possible_nodes = set(g.nodes())
neighbours = g.neighbors(first_node) + [first_node]
possible_nodes.difference_update(neighbours)    # remove the first node and all its neighbours from the candidates
second_node = choice(list(possible_nodes))      # pick second node      

print first_node, second_node
于 2012-06-07T15:23:49.440 に答える
1

そのライブラリはわかりませんが、次のことができると思います。

  n1 = random.choice(g.nodes())
  n2 = random.choice(g.nodes()) 
  while (n1 == n2 or any of the edges of n1 lead to n2):
    n2 = random.choice(g.nodes())
  enjoy(yourNodes)

乾杯

于 2012-06-07T14:42:06.773 に答える