代码如下:
# input:
# A : a large csr matrix (365 million rows and 1.3 billion entries), 32 bit float datatype
# get the two largest eigenvalues of A and the corresponding eigenvectors
from scipy.sparse.linalg import eigsh
(w,V) = eigsh(A,k=2,tol=10e-2,ncv=5)
据我所知,这里没有太多混乱的空间,但是我观察到的是我的机器最初有足够的内存(包括交换在内为90G),但是eigsh的内存使用量缓慢增长在运行过程中调高速度,直到内存用尽。有什么明显的我想念的地方吗?
我尝试过的事情:
-浏览源。这很多,但据我所见,python代码在两次迭代之间没有分配内存。我不太擅长Fortran,但是如果ARPACK本身或调用例程分配了内存,那将是意外的。
-在Octave(MATLAB克隆)中尝试了等效的方法,具有相似的效果,尽管不太明显,因为数据类型必须是双精度的,因此从一开始就受到更多的限制。那么ARPACK本身可能就是什么?
-Google搜索了一堆。看起来Scipy确实(没有?)在某个地方使用了循环引用,这在多次调用eigsh时引起了其他人的困扰,但是我只调用了一次,所以也许这不是同一个问题。
任何帮助将不胜感激。