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

Eigen C++ Sparse Matrix elementwise product and divide

本文关键字:元素 除法 C++ 特征      更新时间:2023-10-16

我正在尝试将在特征C++密集矩阵类(MatrixXd<Eigen/Dense>)中实现的一些方法转换为具有特征C++稀疏矩阵的方法(如SparseMatrix<double><Eigen/Sparse>)。

许多方法可以通过简单的机会MatrixXd直接转换为SparseMatrix<double>。然而,有些方法不能。

我遇到的一个问题是将以下元素被除数转换为稀疏矩阵方法:

(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;