2016-07-13 84 views
2

在我的程序中我有兩個scipy.sparse.csr_matrix。一個只有一行,另一個實際上很大。在程序的每一次迭代中,我都會添加和減去矩陣的行。最終我需要在單行矩陣上使用.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