Eigen C ++稀疏矩阵元素乘积并除

时间:2016-03-25 19:39:24

标签: c++ sparse-matrix eigen

我试图将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方法允许我执行上述操作。

我应该如何使用稀疏矩阵执行逐元素运算?

有没有什么方法可以将密集矩阵转换为稀疏矩阵,反之亦然?

1 个答案:

答案 0 :(得分:1)

这是不受支持的,因为严格来说你会为任何显式零计算0/0。如果矩阵处于压缩模式,您可以解决方法,以确保调用:

beta.makeCompressed();

然后将非零映射为密集数组:

Map<ArrayXd> a(beta.valuePtr(), beta.nonZeros();
(a / a.abs()).sum;