1

这是代码:

# 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 本身有关?

——谷歌了一大堆。看起来 Scipy 确实(是吗?)在某处使用了循环引用,这在多次调用 eigsh 时引起了其他人的悲痛,但我只调用了一次,所以也许这不是同一个问题。

任何帮助将不胜感激。

4

0 回答 0