Armadillo 能否有效地将稀疏乘以稀疏和稀疏乘以密集矩阵乘以密集结果?

Can Armadillo efficiently multiply sparse-by-sparse and sparse-by-dense matrices into a dense result?

我正在使用犰狳解决一些线性代数问题。它具有 SpMat<float> 用于稀疏矩阵和 Mat<float> 用于密集矩阵。

假设我有稀疏矩阵S_aS_b,以及稠密矩阵D。我需要计算结果 S_a*S_bS_a*D,两种情况下的结果都是密集的。

我可以将稀疏矩阵转换为稠密矩阵然后相乘,但那样效率很低(这些矩阵非常大)。有没有办法告诉犰狳将结果存储到密集矩阵而不执行中间转换步骤?

您可以使用 mat 构造函数,它采用稀疏矩阵并将其数据转换为密集矩阵:

arma::mat out1(S_a * S_b);
arma::mat out2(S_b * D);

稀疏 class 的两个乘法运算符(稀疏-稀疏和稀疏-密集)都将产生一个稀疏矩阵对象作为输出。 (它是否真的稀疏取决于输入的结构。)可以使用带有签名的密集矩阵构造函数将其转换为密集矩阵:arma::mat(arma::sp_mat).