如何在控制台中打印带有特征的格式化稀疏矩阵?

时间:2016-07-24 14:51:18

标签: eigen

我正在与Eigen Eigen合作。我有一个由一组Triplet定义的稀疏矩阵,我想以格式化的方式打印Matrix。我已经看到通过执行Matrix.format(FORMAT_TYPE)Eigen: IOFormat可以使用普通的Matrix。但我没有找到一种方法为稀疏矩阵做同样的事情。我想获得像Matlab输出的矩阵输出。 非常感谢提前。

2 个答案:

答案 0 :(得分:1)

要获得良好的格式,您需要先将其转换为密集矩阵:

SparseMatrix<double> spmat;
...
std::cout << MatrixXd(spmat) << std::endl;

答案 1 :(得分:0)

可能不再对OP感兴趣,但是我是通过Google来到这里的,所以其他人也可能...

直接打印整个稀疏矩阵并不现实,因为它们通常很大。 block operator也适用于稀疏,因此您可以执行以下操作:

int nElements = 10;
std::cout <<
compMat.block( compMat.rows() - nElements, compMat.cols() - nElements, nElements, nElements )
          << std::endl;

在正方形稀疏矩阵的右下角打印最后10个元素。

这在我的计算机上处​​于释放模式需要6毫秒。

以下代码在具有大约35000 * 35000条目的完整矩阵上执行相同的操作,但是花费〜25000ms ...

int nElements = 10;
std::cout <<
Eigen::MatrixXd( compMat ).block( compMat.rows() - nElements, compMat.cols() - nElements, nElements,
                                               nElements )
          << std::endl;
相关问题