稀疏矩阵的块操作 - Eigen Toolbox-C ++

时间:2016-02-01 06:48:22

标签: c++ sparse-matrix eigen

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分配一个块到临时矩阵中的块。对于临时矩阵,打印输出为零。如果我在概念上错过了某些内容,任何人都可以帮助我。最近的文档说,块操作可用于稀疏矩阵。

1 个答案:

答案 0 :(得分:3)

Eigen中稀疏矩阵的块不是全部可写的。某些(例如,列主矩阵中为.col(Index))但通用.block(Index, Index, Index, Index)不是。 documentation在这个问题上非常混乱,但如果你仔细观察,所有的例子都是密集矩阵而不是稀疏矩阵。 col()文档也使用密集矩阵示例,但如果您尝试它,您会看到它有效。