计算SparseMatrix 1范数,Eigen中的Inf-norm的有效方法

时间:2017-03-18 13:27:50

标签: c++ sparse-matrix eigen eigen3

在Eigen库中,我知道密集Eigen::Matrix类有访客减少,我可以有效地使用它来计算他们的 1- norm inf-norm 等。就像这样:

Eigen::MatrixXd A;
...
A.colwise().lpNorm<1>().maxCoeff();
A.rowwise().lpNorm<1>().maxCoeff();
// etc.

现在我有稀疏的Eigen::SparseMatrix课程。在这种情况下,如何有效地计算这些规范?

1 个答案:

答案 0 :(得分:0)

您可以使用带矢量为1的乘积计算colwise / rowwise 1-norm:

(Eigen::RowVectorXd::Ones(A.rows()) * A.cwiseAbs()).maxCoeff();
(A.cwiseAbs() * Eigen::VectorXd::Ones(A.cols()).maxCoeff();

检查生成的装配,看看是否针对您的目的进行了充分优化。如果没有,或者你需要其他lpNorm,你可能需要用稀疏迭代器编写两个嵌套循环。