【问题标题】:Computing generalized eigen values for sparse matrices in python在 python 中计算稀疏矩阵的广义特征值
【发布时间】:2012-10-23 15:40:58
【问题描述】:

我正在使用 scipy.sparse.linalg.eigsh 来解决非常稀疏矩阵的广义特征值问题并遇到内存问题。该矩阵是一个有 100 万行/列的方阵,但每行只有大约 25 个非零条目。有没有办法在不将整个矩阵读入内存的情况下解决问题,即一次只处理内存中的矩阵块?

如果解决方案涉及在 python 或 java 中使用不同的库,也可以。

【问题讨论】:

  • 不幸的是,您似乎已经在使用 ARPACK。您可能必须使用 ARPACK 的 FORTRAN 实现,或者使用 ARPACK++ 来获得所需的细粒度内存控制...
  • 你试过Shift-invert mode ?。另外,你真的需要所有的特征值(你可以只计算最大的)吗?

标签: python matrix machine-learning scipy linear-algebra


【解决方案1】:

对于 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 是否会有所收获。

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 2012-02-23
    • 2022-01-25
    • 2013-09-25
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2012-12-17
    • 2012-10-22
    相关资源
    最近更新 更多