特征库,简单的线性代数操作,具有稀疏的矩阵,增加了其分配的尺寸



我对eigen是相对较新的,并且在使用eigen中使用稀疏矩阵时面临以下问题。

当我使用以下代码时,添加后的变量C的分配大小增加到20。我为何会发生这种情况而迷失了方向。

Eigen::SparseMatrix< double > A( 10, 1 );
A.reserve( Eigen::VectorXi::Constant(1,3) );
A.coeffRef( 2, 0 ) = 2;
A.coeffRef( 3, 0 ) = 3;
A.coeffRef( 7, 0 ) = 7;
Eigen::SparseMatrix< double > B( 10, 1 );
B.reserve( Eigen::VectorXi::Constant(1,3) );
B.coeffRef( 0, 0 ) = 0;
B.coeffRef( 1, 0 ) = 1;
B.coeffRef( 8, 0 ) = 8;
Eigen::SparseMatrix< double > C( 10, 1 );
C.reserve( Eigen::VectorXi::Constant(1,6) );
C = A + B;

看起来像assign_sparse_to_sparse中有一条线

temp.reserve((std::max)(src.rows(),src.cols())*2);

之后,temp被移至实际目的地。这意味着,在您的情况下,先保留(和调整(没有帮助。我不确定,为什么temp不保留到相应的评估器的nonZerosEstimate()

独立于此,如果您正在使用N x 1稀疏矩阵,则应考虑切换到SparseVector<double>

最新更新