web-dev-qa-db-ja.com

Networkxネイバーセットが印刷されない

Networkxコードに少し問題があります。グラフ内のノードからすべてのネイバーを見つけようとしていますが..。

neighbor = Graph.neighbors(element)
print(neighbor)

出力:

<dict_keyiterator object at 0x00764BA0>

私が取得することになっているすべての隣人の代わりに...古いバージョンのnetworkxを使用している私の友人はこのエラーを取得しません。彼のコードはまったく同じであり、完全に機能します。

誰か助けてもらえますか? networkxをダウングレードすることはできません。

編集:

これは私の完全なコードです

Graph = nx.read_graphml('macbethcorrected.graphml')    
actors = nx.nodes(Graph)

for actor in actors:
    degree = Graph.degree(actor)
    neighbor = Graph.neighbors(actor)
    print("{}, {}, {}".format(actor, neighbor, degree))

これは私が使用しているグラフです: http://politicalmashup.nl/new/uploads/2013/09/macbethcorrected.graphml

8

Networkx 2.0以降、Graph.neighbors(element)はリストではなくイテレータを返します。

リストを取得するには、listを適用するだけです。

list(Graph.neighbors(element))

またはリスト内包表記を使用します。

neighbors = [n for n in Graph.neighbors(element)]

最初の方法( Joel で最初に言及された)は、より高速であるため、推奨される方法です。

参照: https://networkx.github.io/documentation/stable/reference/classes/generated/networkx.Graph.neighbors.html

12
Fabian Ying

他の人が指摘しているように、networkx 2.0では、neighborsはリストではなくイテレータを返します。 Networkxは、1.xから2.0に記述された コードを移行するためのガイド 1を提供しています。 neighborsの場合は、

list(G.neighbors(n))

イテレータをリストに変換する最速の方法 を参照してください)。移行ガイドに例を示します。

>>> G = nx.complete_graph(5)
>>> n = 1
>>> G.neighbors(n)
<dictionary-keyiterator object at ...>
>>> list(G.neighbors(n))
[0, 2, 3, 4]
1
Joel

あなたはそのような方法を作ることができます、

def neighbors(G, n):
"""Return a list of nodes connected to node n. """
return list(G.neighbors(n))

そして、そのメソッドを次のように呼び出します。

print(" neighbours = ", neighbors(graph,'5'))

ここで、5はグラフのノードであり、

graph = nx.read_edgelist(path, data = (('weight', float), ))

パス変数には、データがより多くのノードとエッジにあるデータセットファイルのパス値が含まれます。

0
AMI CHARADAVA