0

有没有其他人在 python 中使用 networkx 在 add_edge 中遇到这个错误?任何有关如何解决它的建议将不胜感激。

这是一个 python 程序,通过 networkx 的网络分析来探索一些数字属性。

错误是:

File "C:\Python27\lib\site-packages\networkx\classes\graph.py", line 718, in add_edge
self.adj[v][u] = datadict
MemoryError

该代码只是将每个 num 连接到该数字的一些整数属性以进行后期分析:

maxnum = 10000001
for num in range(2,maxnum):
    G.add_node(num)
    #get properties (ints) and make unique
    properties = list(set(generate_properties(num)))  
    for p in properties:
        G.add_edge(num,p)

让我感到惊讶的是,当 maxnum 为 10^6 时它可以工作,而当 10^7 时我收到此错误。最重要的是,我想了解为什么会发生内存错误。谢谢!

另外:如果相关的话,我的机器有 4GB 的 RAM

4

1 回答 1

4

数量巨大

4 Gb / 10000001 = 430 bytes per node或 100 个 C 整数。由于 Python 解释器显然不是在您的机器上运行的唯一程序,并且可能每个节点/边都需要一些内存(边至少为2 个整数),因此每个节点的边数不能超过 50 个。这只是下限,Python 的内存效率当然要低得多。

此外,如果您在 32 位平台上运行,则可用空间可能少于 4 Gb(在 Windows 上不超过 3 Gb)。所以内存不足一点也不奇怪。

于 2013-06-08T11:21:58.503 回答