c++ - Eigen 库,具有稀疏矩阵的简单线性代数运算增加了它们的分配大小

标签 c++ sparse-matrix eigen

我对 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/

相关文章:

c++ - 具有未知行数和列数的矩阵特征库

c# - 为什么 C/C++ 有头文件,不像 C# 和 Java 等其他语言?

python - mongodb到python稀疏矩阵,如何让它更快?

python - Pandas 中 bool 索引导致内存爆炸

c++ - Eigen:将实数和虚数 MatrixXd 映射到 MatrixXcd

c++ - 如何正确地从nalgebra::Matrix转换为Eigen::MatrixXf?

c++ - 如何传递 unique_ptr 来设置我的对象的成员变量?

c++ - 运行 Google 测试时出现段错误

c++ - ld 警告 : stack subl instruction is too different from dwarf stack size on OS X

python - 用 scipy.sparse 计数