Armadillo 能否有效地将稀疏乘以稀疏和稀疏乘以密集矩阵乘以密集结果?
Can Armadillo efficiently multiply sparse-by-sparse and sparse-by-dense matrices into a dense result?
我正在使用犰狳解决一些线性代数问题。它具有 SpMat<float>
用于稀疏矩阵和 Mat<float>
用于密集矩阵。
假设我有稀疏矩阵S_a
和S_b
,以及稠密矩阵D
。我需要计算结果 S_a*S_b
和 S_a*D
,两种情况下的结果都是密集的。
我可以将稀疏矩阵转换为稠密矩阵然后相乘,但那样效率很低(这些矩阵非常大)。有没有办法告诉犰狳将结果存储到密集矩阵而不执行中间转换步骤?
您可以使用 mat
构造函数,它采用稀疏矩阵并将其数据转换为密集矩阵:
arma::mat out1(S_a * S_b);
arma::mat out2(S_b * D);
稀疏 class 的两个乘法运算符(稀疏-稀疏和稀疏-密集)都将产生一个稀疏矩阵对象作为输出。 (它是否真的稀疏取决于输入的结构。)可以使用带有签名的密集矩阵构造函数将其转换为密集矩阵:arma::mat(arma::sp_mat)
.
我正在使用犰狳解决一些线性代数问题。它具有 SpMat<float>
用于稀疏矩阵和 Mat<float>
用于密集矩阵。
假设我有稀疏矩阵S_a
和S_b
,以及稠密矩阵D
。我需要计算结果 S_a*S_b
和 S_a*D
,两种情况下的结果都是密集的。
我可以将稀疏矩阵转换为稠密矩阵然后相乘,但那样效率很低(这些矩阵非常大)。有没有办法告诉犰狳将结果存储到密集矩阵而不执行中间转换步骤?
您可以使用 mat
构造函数,它采用稀疏矩阵并将其数据转换为密集矩阵:
arma::mat out1(S_a * S_b);
arma::mat out2(S_b * D);
稀疏 class 的两个乘法运算符(稀疏-稀疏和稀疏-密集)都将产生一个稀疏矩阵对象作为输出。 (它是否真的稀疏取决于输入的结构。)可以使用带有签名的密集矩阵构造函数将其转换为密集矩阵:arma::mat(arma::sp_mat)
.