稀疏矩阵,左边的矩阵除以C ++

时间:2016-12-07 17:13:29

标签: c++ sparse-matrix eigen

我有两个稀疏矩阵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中解决相同的等式

1 个答案:

答案 0 :(得分:-2)

试试这个: http://arma.sourceforge.net/docs.html#operators

它有很多矩阵运算符:

运算符:+ - * /%==!=&lt; =&gt; =&lt; &GT; Mat,Col,Row和Cube类的重载运算符

意思:

  • 添加两个对象 -
    从一个对象减去另一个对象或否定对象

/
通过另一个对象或标量对对象进行元素划分 *
两个对象的矩阵乘法;除非将立方体乘以标量

,否则不适用于Cube类


Schur产品:两个对象的元素乘法

==
两个对象的元素平等评估;生成一个umat类型的矩阵,其条目指示在给定位置,两个对象中的两个元素是等于(1)还是不等于(0) !=
两个对象的元素不等式评估

  

=
  至于==,但检查是&#34;大于或等于&#34;   &LT =
  至于==,但检查是&#34;小于或等于&#34;

     

至于==,但检查的结果是&#34;大于&#34;   &LT;
  至于==,但检查的结果是&#34;小于&#34;