我正在使用psycopg2使用从Postgres数据库检索的数据构建networkx图。我可以很好地创建图形,但我想知道是否有更高效和/或Pythonic的方法来做到这一点。
当前代码:
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一次创建多个边缘。我可以通过迭代光标结果来创建一个强大的功能,但这不会比我当前的解决方案更有效。我觉得必须有一种更有效的方法将我的光标结果转换为networkx边缘。也许就像拉链一样?我还想确定一种pythonic方式,以便于将来维护(并满足我自己的好奇心)。
假设我正确理解了“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()还可以为你保存for循环“麻烦”:)像这样,边缘现在是:
print(graph.edges)
[('1', '2'), ('3', '4')]
我希望这就是你要找的东西。