【发布时间】:2016-12-07 17:13:29
【问题描述】:
我有两个稀疏矩阵 A 和 B,我想将 X 计算为 X = A\B 也是方程 A*X = B 的相同解
是否有 C++ 中具有此功能的库?我尝试了 Eigen 和 SparseLU 求解器,但是在处理非常大的稀疏矩阵((6 * 6)百万)时,它花费了太多时间,比 Matlab 长得多。
有什么想法吗?
编辑:
这是Eigen和OpenCV中的解决sn-p,矩阵本来是图像,输出也是图像,sn-p中的B或EIN最好是密集的但我不能这样做在Eigen
Eigen::SparseLU<Eigen::SparseMatrix<float>> Solver;
EA.makeCompressed();
Solver.compute(EA);
if (Solver.info() != Eigen::Success) std::cout << Solver.lastErrorMessage() << std::endl;
else std::cout << "Success !" << std::endl;
cv::SparseMat IN(MatTraverse(Image));
Eigen::SparseMatrix<float> EIN = SparseCV2Eigen(IN);
Eigen::SparseMatrix<float> OUT = Solver.solve(EIN);
Eigen::MatrixXf OUTM(OUT);
OUTM.resize(Image.cols,Image.rows);
cv::Mat CVOUT(OUTM.rows(), OUTM.cols(), CV_32F, OUTM.data());
另外,同样的方程可以在 Matlab 中使用 X = A\B 以更快的速度求解
【问题讨论】:
-
这类问题在这里明确离题。从此help center article 中读取第 4 点。
-
您能否显示minimal reproducible example 以及您的编译器标志?
-
展示你尝试过的东西,可能有人可以帮助你实现它
-
确保您在编译时启用了编译器优化。另外,矩阵对称吗?
-
@AbdarhmanTaha:我的意思是,如果你想用
X相乘,例如,`X*y`,你可以计算:luA.solve(B*y)(假设luA是 LU 分解A.
标签: c++ sparse-matrix eigen