本征 C++ 稀疏矩阵元素乘积和除法

Eigen C++ Sparse Matrix elementwise product and divide

我正在尝试将一些在 Eigen C++ 密集矩阵 class 中实现的方法(MatrixXd<Eigen/Dense>)转换为使用 Eigen C++ 稀疏矩阵的方法(如 SparseMatrix<double>来自 <Eigen/Sparse>).

很多方法可以通过简单的机会直接转换MatrixXdSparseMatrix<double>。但是,有些方法不能。

我遇到的一个问题是将下面的elementwise dividend转化为稀疏矩阵的方法:

(beta.array() / beta.cwiseAbs().array()).sum()

最初,beta 声明为 MatrixXd beta。现在,如果我将 beta 声明为 SparseMatrix<double> beta,则不再有相应的 array() 方法允许我执行上述操作。

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

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

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

beta.makeCompressed();

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

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