特征库,使用稀疏矩阵的简单线性代数运算增加了它们的分配大小

时间:2017-04-25 19:45:18

标签: c++ sparse-matrix eigen

我对Eigen相对较新,在Eigen中使用稀疏矩阵时面临以下问题。

当我使用下面的代码时,添加后变量C的allocatedsize增加到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;

1 个答案:

答案 0 :(得分:0)

assign_sparse_to_sparse中看起来有一条线

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

然后,temp被移动到实际目的地。这意味着,在您的情况下预先保留(和调整大小)并没有帮助。我不确定,为什么temp不会保留给相应评估者的nonZerosEstimate()

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