适用于更高级别Matrix,Vector和esp的最佳免费跨平台库。 SparseMatrix运营?

时间:2010-10-01 12:04:15

标签: c++ linear-algebra multiplatform

我们的平台:

  • Windows,Linux,Mac OSX。

免:

  • 兼容LGPL

支持高级别操作:

  • Eigensystems,SVD,QR,LU,inverse,pseudo inverse(aka Moore-Penrose inverse),...

支持许多矩阵类型以及性能良好的小矩阵,例如3×3:

  • 稀疏,对称,......(以及对它们的操作!,例如pseudoInverse())

当然应该是

  • efficent
  • 过去几个月的积极发展

再次链接LAPACK,MKL,ATLAS等会很高兴。

真正接近的是Armadillo,它不支持稀疏容器。 Eigen3也很棒,但不提供伪逆或支持稀疏矩阵(仅用于保存位置)。

我也看了看:

  • newmat11,boost :: uBlas,gsl,IT ++

3 个答案:

答案 0 :(得分:4)

eigen是最好的!它比boost :: ublas好得多,你可以用ublas编写C = A * B而不是C = prod(A,B),我测试的速度比ublas快得多。

答案 1 :(得分:0)

Eigen3现在有一个稀疏矩阵类,以及几个流行的稀疏矩阵库的接口。如果需要计算伪逆以求解最小二乘系统,则可以直接在正规方程上使用Cholesky decomposition

答案 2 :(得分:0)

NewMat11是一款优秀,易于使用的产品。用于高级矩阵运算的相当轻量级的矩阵库(Eigensystems,SVD,QR,LU,inverse)。你可以很容易地声明和从数组构造一个矩阵:

Matrix M(numRows,numCols);
M << array;

访问矩阵元素:

M.element(i,j);

采取转置:

M.t();

反过来:

M.i();

仅与*:

相乘
M*M

可以很容易地执行其他操作,如:SVD,QR,LU等。

显式地提供伪逆(Moore-Penrose逆)操作对于库不是强制性的,因为您可以通过使用转置和放大器来轻松地计算它。逆操作如下:

如果行&gt; col,那么伪逆(最小二乘解)可以计算为:     M_PseudoInv =(M T M) -1 M T

如果行&lt;然后,伪逆(最小范数解)可以计算为:     M_PseudoInv = M T (MM T -1