Armadillo 中的高效稀疏矩阵加法

Efficient sparse matrix addition in Armadillo

我正在尝试构造一个稀疏矩阵 L 的形式

LHi分别是非常稀疏的矩阵和行向量。最终的 L 矩阵应该具有大约 1 % 的密度。

Armadillo 提供了一个 arma::sp_mat class 似乎可以满足我的需要。 L 的程序集看起来像这样

    arma::sp_mat L(N,N);
    arma::sp_mat Hi(1,N);

    for (int i = 0; i < p; ++ i){

    // The non-zero terms in Hi are populated here

    L += Hi.t() * Hi;

    }

Hi中的非零元素个数与i一致。我对稀疏矩阵没有太多经验,但我期望 L 的增量组装速度相对恒定。

然而,似乎 Hi.t() * Hi 添加到 L 的速度随着时间的推移而降低。我在 assemble L 的方式上做错了吗?我是否应该通过指定我知道它的哪些组件不会为零来预构造 L

似乎 L 没有初始化,因此它在增加 Hi.t() * Hi 时有效地改变了大小。这可能是速度下降的原因。