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

时间:2017-10-24 12:14:07

标签: c++ armadillo

我正在使用Armadillo来解决一些线性代数问题。对于稀疏矩阵,它有SpMat<float>,对于密集矩阵,它有Mat<float>

假设我有稀疏矩阵S_aS_b,以及密集矩阵D。我需要计算产量S_a*S_bS_a*D,结果在两种情况下都会很密集。

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

1 个答案:

答案 0 :(得分:0)

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

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

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