Armadillo 中的高效稀疏矩阵加法
Efficient sparse matrix addition in Armadillo
我正在尝试构造一个稀疏矩阵 L 的形式
L
和Hi
分别是非常稀疏的矩阵和行向量。最终的 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
时有效地改变了大小。这可能是速度下降的原因。
我正在尝试构造一个稀疏矩阵 L 的形式
L
和Hi
分别是非常稀疏的矩阵和行向量。最终的 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
时有效地改变了大小。这可能是速度下降的原因。