我正在使用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;