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
Networkx 2.0以降、Graph.neighbors(element)
はリストではなくイテレータを返します。
リストを取得するには、list
を適用するだけです。
list(Graph.neighbors(element))
またはリスト内包表記を使用します。
neighbors = [n for n in Graph.neighbors(element)]
最初の方法( Joel で最初に言及された)は、より高速であるため、推奨される方法です。
他の人が指摘しているように、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]
あなたはそのような方法を作ることができます、
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), ))
パス変数には、データがより多くのノードとエッジにあるデータセットファイルのパス値が含まれます。