2016-07-13 80 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