首页 文章

特征C稀疏矩阵元素积和除

提问于
浏览
0

我试图将在Eigen C密集矩阵类( MatrixXd ,从 <Eigen/Dense> )中实现的一些方法转换为具有Eigen C稀疏矩阵的方法(如来自 <Eigen/Sparse>SparseMatrix<double> ) .

许多方法可以直接转换为 MatrixXdSparseMatrix<double> . 但是,有些方法不可能 .

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

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

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

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

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

1 回答

  • 1

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

    beta.makeCompressed();
    

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

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

相关问题