我正在使用Armadillo来解决一些线性代数问题。对于稀疏矩阵,它有SpMat<float>
,对于密集矩阵,它有Mat<float>
。
假设我有稀疏矩阵S_a
和S_b
,以及密集矩阵D
。我需要计算产量S_a*S_b
和S_a*D
,结果在两种情况下都会很密集。
我可以将稀疏矩阵转换为密集矩阵然后相乘,但这样效率很低(这些矩阵非常大)。有没有办法告诉Armadillo将结果存储到密集矩阵中而不执行中间转换步骤?
答案 0 :(得分:0)
您可以使用mat
构造函数,该构造函数采用稀疏矩阵并将其数据转换为密集矩阵:
arma::mat out1(S_a * S_b);
arma::mat out2(S_b * D);
稀疏类(稀疏稀疏和稀疏密集)的乘法运算符都将产生稀疏矩阵对象作为输出。 (它是否真的稀疏将取决于输入的结构。)可以使用带有签名的密集矩阵构造函数将其转换为密集矩阵:arma::mat(arma::sp_mat)
。