0

Pythonでnetworkxを使用したadd_edgeでこのエラーが発生した人はいますか? それを解決する方法についてアドバイスをいただければ幸いです。

これは、networkx を使用したネットワーク分析を通じていくつかのプロパティを探索する Python プログラムです。

エラーは次のとおりです。

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

コードは、後で分析するために、各数値をその数値のいくつかの整数プロパティに結合するだけです。

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 に答える