2017-12-30 8 views
0

psycopg2を使用してPostgres DBから取得したデータを使用してnetworkxグラフを作成しています。私はグラフをうまく作成することができますが、それを行うより効率的かつ/またはPython的な方法があるのだろうかと思います。psycopg2のクエリ結果からnetworkxグラフを効率的に作成するにはどうすればよいですか?

現在コード:

DG = nx.DiGraph() 
cur.execute(edgeQuery) 
for row in cur: 
    self.DG.add_edge(
     row[0],   # fnode 
     row[1],   # tnode 
     weight=row[3],  # cost 
     name=row[4] 
    ) 

networkxドキュメントは、複数のエッジがebunchに供給することにより、一度に作成することができる示しています。私はカーソルの結果を反復することでebunchを作成することができましたが、それは私の現在のソリューションより効率的ではありません。私は、カーソルの結果をnetworkxのエッジに変換するより効率的な方法が必要なように感じます。多分ジップのような何か?私は将来のメンテナンスを容易にするために(そして自分の好奇心を満たすために)それを行うための無限の方法を特定したいと思います。

答えて

0

"cur"のデータ構造が正しく理解されていると仮定します。配列に変換してコンパクトな表記にする必要があります。たとえば:

import numpy as np 
import networkx as nx 

graph = nx.DiGraph() 
x= np.array([[1,2,0.5,"o"],[3,4,0.2,"a"]]) 
graph.add_edges_from(x[:,:2],weight = x[:,2], name = x[:,3]) 

add_edges_from()また、あなたのためのループ "トラブル" :)このよう を保存し、エッジは次のようになります。

print(graph.edges) 

[( '1'、 '2')、( '3'、 '4')]

これはあなたが探しているといいと思います。

関連する問題