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