我有两个稀疏矩阵A和B,我想将X计算为X = A\B
,也是等式A*X = B
的相同解决方案
C ++中是否有一个具有此功能的库?我尝试使用SparseLU解算器进行Eigen,但处理非常大的稀疏矩阵((6 * 6)数百万)时花费的时间太多,比Matlab长得多。
任何想法?
编辑:
这是Eigen和OpenCV中的解决片段,矩阵最初是一个图像,输出也是一个图像,如果片段中的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());
另外,可以在更快的时间内使用X = A\B
在Matlab中解决相同的等式
答案 0 :(得分:-2)
试试这个: http://arma.sourceforge.net/docs.html#operators
它有很多矩阵运算符:
运算符:+ - * /%==!=&lt; =&gt; =&lt; &GT; Mat,Col,Row和Cube类的重载运算符
意思:
/
通过另一个对象或标量对对象进行元素划分
*
两个对象的矩阵乘法;除非将立方体乘以标量
%
Schur产品:两个对象的元素乘法
==
两个对象的元素平等评估;生成一个umat类型的矩阵,其条目指示在给定位置,两个对象中的两个元素是等于(1)还是不等于(0)
!=
两个对象的元素不等式评估
=
至于==,但检查是&#34;大于或等于&#34; &LT =
至于==,但检查是&#34;小于或等于&#34;至于==,但检查的结果是&#34;大于&#34; &LT;
至于==,但检查的结果是&#34;小于&#34;