128 GBのメモリを備えたLinuxサーバーでpython言語を使用しています。 Markovアルゴリズムを使用してグラフのクラスタリングを行っています。プロセスの詳細は次のとおりです。
Graphtype = nx.Graph()
G = nx.from_pandas_edgelist(df, 'source','target', Edge_attr='weight', create_using=Graphtype)
Name:
Type: Graph
Number of nodes: 4533801
Number of edges: 10548751
Average degree: 4.6534
nx.is_connected(G)
False
print(nx.number_connected_components(G))
7254
import markov_clustering as mc
import networkx as nx
matrix = nx.to_scipy_sparse_matrix(Gc) # build the matrix
result = mc.run_mcl(matrix) # run MCL with default parameters
clusters = mc.get_clusters(result) # get clusters
MemoryError
クラスターを抽出しようとすると、依然としてメモリエラーメッセージが表示されるのはなぜですか?どうした?どうすればこれを回避できますか?
UPDATE:
あなたのコードからは、32ビットのPythonを使用していると思います。つまり、ハードウェアに関係なく、4 GBを超えるRAMを使用することはできません。
64ビットにアップグレードするPythonを使用すると、最大16EBのRAMを使用できます。これにより、サーバー上にある追加のスペースを使用できます。
someメモリを節約するには、不要な変数を保存せず、python破棄された情報を消去します。これらのコード行で確認できることから:
matrix = nx.to_scipy_sparse_matrix(Gc) # build the matrix
result = mc.run_mcl(matrix) # run MCL with default parameters
clusters = mc.get_clusters(result) # get clusters
「マトリックス」および「結果」変数は「クラスター」に到達するためにのみ使用されるため、理論的には保存する必要はありません。このコードは、pythonにメモリの一部をクリアする権限を与える必要があります。
clusters = mc.get_clusters(mc.run_mcl(nx.to_scipy_sparse_matric(Gc)))
明らかに、コードの読みやすさと優雅さを犠牲にしているため、問題を解決するのに十分なスペースが解放される可能性は低いですが、念のために注意を向ける価値はあります。