在Eigen库中,我知道密集Eigen::Matrix
类有访客和减少,我可以有效地使用它来计算他们的 1- norm , inf-norm ,等。就像这样:
Eigen::MatrixXd A;
...
A.colwise().lpNorm<1>().maxCoeff();
A.rowwise().lpNorm<1>().maxCoeff();
// etc.
现在我有稀疏的Eigen::SparseMatrix
课程。在这种情况下,如何有效地计算这些规范?
答案 0 :(得分:0)
您可以使用带矢量为1的乘积计算colwise / rowwise 1-norm:
(Eigen::RowVectorXd::Ones(A.rows()) * A.cwiseAbs()).maxCoeff();
(A.cwiseAbs() * Eigen::VectorXd::Ones(A.cols()).maxCoeff();
检查生成的装配,看看是否针对您的目的进行了充分优化。如果没有,或者你需要其他lpNorm
,你可能需要用稀疏迭代器编写两个嵌套循环。