2017-12-30 5 views
0

psycopg2를 사용하여 Postgres DB에서 검색 한 데이터를 사용하여 networkx 그래프를 작성하고 있습니다. 나는 그래프를 잘 만들 수 있지만, 좀 더 효율적이거나 파이썬 적 방법이 있는지 궁금합니다.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')]

희망하시는 바입니다.

관련 문제