我试图将Eigen C ++密集矩阵类(MatrixXd
中实现的一些方法从<Eigen/Dense>
)转换为具有Eigen C ++稀疏矩阵的方法(如来自SparseMatrix<double>
的{{1}} )。
只需偶然<Eigen/Sparse>
到MatrixXd
,就可以直接转换许多方法。但是,有些方法不可能。
我遇到的一个问题是将以下元素分红转换为稀疏矩阵方法:
SparseMatrix<double>
最初,(beta.array() / beta.cwiseAbs().array()).sum()
被声明为beta
。现在,如果我将MatrixXd beta
声明为beta
,则不再有相应的SparseMatrix<double> beta
方法允许我执行上述操作。
我应该如何使用稀疏矩阵执行逐元素运算?
有没有什么方法可以将密集矩阵转换为稀疏矩阵,反之亦然?
答案 0 :(得分:1)
这是不受支持的,因为严格来说你会为任何显式零计算0/0。如果矩阵处于压缩模式,您可以解决方法,以确保调用:
beta.makeCompressed();
然后将非零映射为密集数组:
Map<ArrayXd> a(beta.valuePtr(), beta.nonZeros();
(a / a.abs()).sum;