计算一个非常大的矩阵的逆

Osm*_*rin 10 c++ sparse-matrix matrix-inverse

我试图用C++计算一个非常大的矩阵(11300x21500)的逆.到目前为止,我已经尝试了Eigen和Armadillo库,但都在初始化阶段失败,说没有足够的内存.有没有办法克服这种情况?

提前致谢

PS
我应该将矩阵的大小更正为21500x21500.正如UmNyobe所说,这不是方阵.它实际上是观察矩阵X,我试图计算(X T X)-1

我有一个8GB内存(在64位系统中),但我不认为我正在利用所有这些内存空间.任务管理器显示错误时的内存使用量为1GB.也许Windows7中有一个操作系统命令可以在内存使用量超过1GB时关闭应用程序.

顺便说一句,我最初的目的是对这个观察矩阵进行回归.

还有一件事:观察矩阵X的每一行中的大多数列都是零.有没有办法利用这个,限制反相操作中的内存使用?

Eit*_*n T 6

假设矩阵方形的,那么您可能正在寻找的是就地矩阵求逆算法.

你应该看看这个.


MrW*_*Wuf 5

您不能反转非方矩阵.

http://en.wikipedia.org/wiki/Invertible_matrix

  • 即使它是方形的,内存在32位硬件上仍然很重要 (2认同)
  • 我想他想要一个Moore-Penrose伪逆,你可以采用非方矩阵. (2认同)

UmN*_*obe 5

假设一个(11300 x 11300)整数矩阵(32位),您有

4*(11300^2)/(1024^3) = 0.4757 GB
Run Code Online (Sandbox Code Playgroud)

如果使用双精度,则将此数字加倍。

如果库使用的是Strassen算法,该算法需要相同大小的附加内存,则将前一个数字加倍。

因此,使用Strassen或高斯反演此大小的基于双精度的矩阵将花费1.9 GB。