【发布时间】:2010-09-05 07:06:20
【问题描述】:
我需要能够在 python 中操作一个大的(10^7 个节点)图。每个节点/边对应的数据是最少的,比如说,少量的字符串。就内存和速度而言,最有效的方法是什么?
dicts 的 dict 更灵活、更易于实现,但我直观地希望列表列表更快。 list 选项还要求我将数据与结构分开,而 dicts 将允许类似的东西:
graph[I][J]["Property"]="value"
你有什么建议?
是的,我应该更清楚我所说的效率是什么意思。在这种特殊情况下,我的意思是随机访问检索。
将数据加载到内存中并不是一个大问题。这是一劳永逸的。耗时的部分是访问节点,以便我可以提取信息并衡量我感兴趣的指标。
我没有考虑将每个节点都设为一个类(所有节点的属性都相同),但似乎这会增加额外的开销层?我希望有人对他们可以分享的类似案例有一些直接的经验。毕竟,图是 CS 中最常见的抽象之一。
【问题讨论】:
-
如果这个非常受欢迎和有用的问题没有被关闭,那就太好了,因为现在我们被 2016 年的陈旧信息困住了。
-
应该回答这个问题,因为它要求一个特定的东西:“在内存和速度方面最有效”的方式来操作 Python 中的大图。
-
不同意。这不是一个具体的要求,因为“操纵”基本上没有什么具体的意思。它并不要求解决特定问题,因此它生成的大多数答案只是图书馆的建议。据推测,如果重新开放,会推荐更新的图书馆。如果当前答案已过时,我宁愿删除此问题。
-
这个问题在 2019 年对我来说很重要,但遗憾的是,只有
networkx真的被推荐了。可以肯定的是,这是一个很棒的库。但它不是图表中的numpy。
标签: python performance data-structures graph-theory