Block operations for sparse matrices - Eigen Toolbox - C++
#include "Eigen/Dense"
#include "Eigen/Sparse"
#include <iostream>
using namespace std;
using namespace Eigen;
int main()
{
MatrixXd silly(6, 3);
silly << 0, 1, 2,
0, 3, 0,
2, 0, 0,
3, 2, 1,
0, 1, 0,
2, 0, 0;
SparseMatrix<double> sparse_silly,temp;
sparse_silly= Eigen::SparseMatrix<double>(6, 3);
temp = Eigen::SparseMatrix<double>(6, 3);
sparse_silly = silly.sparseView();
std::cout << "Whole Matrix" << std::endl;
std::cout << sparse_silly << std::endl;
temp.block(0, 0, 2, 2)=sparse_silly.block(0, 0, 2, 2);
std::cout << "block of matrix" << std::endl;
std::cout << temp.block(0, 0, 2, 2) << std::endl;
getchar();
return 0;
}
在上面的代码中,稀疏矩阵的块操作不能使用Eigen工具箱。我想要从sparse_silly分配一个块到临时矩阵中的块。对于临时矩阵,打印输出为零。如果我在概念上错过了某些内容,任何人都可以帮助我。最近的文档说,块操作可用于稀疏矩阵。
答案 0 :(得分:3)
Eigen中稀疏矩阵的块不是全部可写的。某些(例如,列主矩阵中为.col(Index)
)但通用.block(Index, Index, Index, Index)
不是。 documentation在这个问题上非常混乱,但如果你仔细观察,所有的例子都是密集矩阵而不是稀疏矩阵。 col()
文档也使用密集矩阵示例,但如果您尝试它,您会看到它有效。