eigen :: solve的返回值分配需要花费大量时间

时间:2018-08-09 07:40:45

标签: c++ matrix eigen

在我的工作中,我需要计算逆矩阵(我的代码中为Mat Original),这里的B是单位矩阵。矩阵太大(56000 * 56000),无法直接使用$ solver.solve(B)$,相反,我需要一一计算逆矩阵的每一列。如果我不使用下面的代码进行赋值操作,则该过程会很快,耗时30秒。

Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>> solver;
solver.compute(Original);
for(int i = 0; i< B.cols();i++){
  solver.solve(B.col(i));
}

但是如果我需要获取Solve()的返回值,则工作将变得非常耗时。

Eigen::SimplicialLDLT<Eigen::SparseMatrix<double>> solver;
solver.compute(Original);
Vec x(Original.rows());
for(int i = 0; i< B.cols();i++){
  x = solver.solve(B.col(i));
}

所以有人知道耗时的原因吗?还是有其他方法可以计算逆矩阵?

0 个答案:

没有答案