本征 C++ 稀疏矩阵元素乘积和除法
Eigen C++ Sparse Matrix elementwise product and divide
我正在尝试将一些在 Eigen C++ 密集矩阵 class 中实现的方法(MatrixXd
从 <Eigen/Dense>
)转换为使用 Eigen C++ 稀疏矩阵的方法(如 SparseMatrix<double>
来自 <Eigen/Sparse>
).
很多方法可以通过简单的机会直接转换MatrixXd
到SparseMatrix<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;
我正在尝试将一些在 Eigen C++ 密集矩阵 class 中实现的方法(MatrixXd
从 <Eigen/Dense>
)转换为使用 Eigen C++ 稀疏矩阵的方法(如 SparseMatrix<double>
来自 <Eigen/Sparse>
).
很多方法可以通过简单的机会直接转换MatrixXd
到SparseMatrix<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;