如何申报征稀疏矩阵向量

问题描述

要在 Eigen 中声明稠密矩阵的向量,我使用以下格式

std::vector<Eigen::MatrixXd> AMAT(idx,Eigen::MatrixXd::Zero(1000,1000));

其中IDX是矢量的大小。是否有一个等效声明来定义一个稀疏矩阵?我目前声明一个稀疏矩阵

Eigen::SparseMatrix<double>  BMAT(1000,1000);

这将是对我定义这种矩阵的向量,而不是为每个索引分别声明稀疏矩阵更有效。任何帮助表示赞赏。

解决方法

看到您希望向量中的矩阵具有不同的大小,您可能不应该对 std::vector 使用该初始化构造函数。

相反,只需逐个元素构建向量:

#include <Eigen/Sparse>
#include <vector>
#include <algorithm>

int main() {
    auto sizes = { 100,200,300 };

    std::vector<Eigen::SparseMatrix<double>> BMATvec;
    BMATvec.reserve(sizes.size());

    std::transform(cbegin(sizes),cend(sizes),back_inserter(BMATvec),[](auto size) { return Eigen::SparseMatrix<double>(size,size);});
}