将稀疏矩阵行转换为密集泄漏内存

Converting row of sparse matrix to dense leaks memory

在我的程序中我有两个 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)

所以当我 运行 上面的程序时,我看到在某个点之后使用的内存不会停止增长。

这是 a bug,将在 scipy 0.18.0 中修复。没有解决方法。