我正在使用scipy.sparse.linalg.eigsh来解决非常稀疏的矩阵并陷入内存问题的广义特征值问题。矩阵是一个具有100万行/列的正方形矩阵,但每行只有大约25个非零条目。有没有办法解决问题,而无需将整个矩阵阅读到内存中,即一次仅在内存中使用矩阵的块?
如果解决方案涉及在Python或Java中使用其他库。
对于Arpack,您只需要编码计算某些矩阵矢量产品的例程即可。这可以以任何您喜欢的方式实现,例如从磁盘读取矩阵。
from scipy.sparse.linalg import LinearOperator
def my_matvec(x):
y = compute matrix-vector product A x
return y
A = LinearOperator(matvec=my_matvec, shape=(1000000, 1000000))
scipy.sparse.linalg.eigsh(A)
检查scipy.sparse.linalg.eigsh文档中是否有广义特征值问题案例中的内容。
Scipy Arpack界面或多或少地公开了完整的Arpack接口,因此我怀疑您会通过切换到Fortran或其他某种访问Arpack的方法来获得很多收益。