我对 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>
相反。
关于c++ - Eigen 库,具有稀疏矩阵的简单线性代数运算增加了它们的分配大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43619635/