在 Eigen 库中,我知道有 visitors 和 reductions 用于密集的 Eigen::Matrix
类,我可以有效地使用它们来计算他们的 1-norm, inf-norm, etc. 是这样的:
Eigen::MatrixXd A;
...
A.colwise().lpNorm<1>().maxCoeff();
A.rowwise().lpNorm<1>().maxCoeff();
// etc.
现在我有了稀疏 Eigen::SparseMatrix
类。在这种情况下,我如何有效地计算这些范数?
最佳答案
您可以使用带有 vector 1 的乘积来计算 colwise/rowwise 1-范数:
(Eigen::RowVectorXd::Ones(A.rows()) * A.cwiseAbs()).maxCoeff();
(A.cwiseAbs() * Eigen::VectorXd::Ones(A.cols()).maxCoeff();
检查生成的程序集,看看它是否针对您的目的进行了充分优化。如果没有,或者如果您需要其他 lpNorm
,您可能需要编写两个带有稀疏迭代器的嵌套循环。
关于c++ - 在 Eigen 中计算 SparseMatrix 1-范数、Inf-范数的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42874976/