2016-07-13 25 views
2

私のプログラムでは、2つのscipy.sparse.csr_matrixがあります。 1つは行が1つしかなく、もう1つは実際には大きくなります。プログラムの各反復では、行列の行を加算および減算します。最終的には、単一行の行列に対して.todense()を使用する必要があります。私は、この関数を呼び出すだけで、使用されたメモリが明白な理由なく大きくなることに気付きました。私は多くの反復を行う必要があり、このメモリリークを起こす余裕がありません。疎行列の行を密なリークメモリに変換する

私は私の問題を説明する簡単なプログラム書くことができました:私は上記のプログラムを実行するとだから私は、ある時点の後で使用するメモリが成長を停止しないことがわかり

import numpy as np 
from scipy import sparse 

a = sparse.csr_matrix(np.matrix(np.random.random((1, 250)))) 
b = sparse.csr_matrix(np.matrix(np.random.random((250, 250)))) 

for i in range(10000000): 
    a = a - b[4] 
    c = a.todense() 
    print(i) 

を。

+0

大部分のコンソールは、それに含まれているものを保存しなければならないため、印刷されている可能性があります(数字は0-10.000.000 + '\ n')。 – Delioth

+0

私はc = a.todense()行にコメントすると、使用するメモリは一定です。 – pjdrm

答えて

3

これはa bugで、scipy 0.18.0で修正されます。回避策はありません。

+0

この問題がscipy 0.18.0で修正されたことを確認するだけです。 – pjdrm

関連する問題