我对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;
答案 0 :(得分:0)
在assign_sparse_to_sparse
中看起来有一条线
temp.reserve((std::max)(src.rows(),src.cols())*2);
然后,temp
被移动到实际目的地。这意味着,在您的情况下预先保留(和调整大小)并没有帮助。我不确定,为什么temp
不会保留给相应评估者的nonZerosEstimate()
。
独立于此,如果您使用N x 1
稀疏矩阵,则应考虑切换为SparseVector<double>
。