L
和Hi
分别是非常稀疏的矩阵和行向量。最终的L矩阵应具有约1%的密度。
犰狳提供了arma::sp_mat
课程,似乎符合我的需要。然后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
的速度随着时间的推移而降低。我在组装L
的方式上做错了什么?我应该通过指定我知道哪些组件不会为零来预构建L
吗?
答案 0 :(得分:0)
似乎L
未初始化,因此当使用Hi.t() * Hi
递增时,它会有效地更改大小。这可能是速度下降的原因。