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



我正在使用Eigen Eigen。我有一个由一组Triplet定义的稀疏矩阵,我想以格式化的方式打印矩阵。我已经看到,用普通矩阵做矩阵是可能的。format(format_TYPE)特征:IOFormat。但对于稀疏矩阵,我没有找到同样的方法。我想获得一个类似矩阵的Matlab输出的输出。非常感谢。

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

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

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

直接打印整个稀疏矩阵是不可行的,因为它们通常很大。块运算符也适用于稀疏,因此您可以执行以下操作:

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

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

在我的机器上,这需要6毫秒的释放模式。

以下代码对大约有35000*35000个条目的完整矩阵执行相同的操作,但需要大约25000毫秒。。。

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

最新更新