2017-03-18 3 views
1

Dans la bibliothèque Eigen, je sais qu'il ya visiteurs et réductions pour dense classe Eigen::Matrix que je peux utiliser efficacement pour calculer leur norme 1 , inf-norme, etc. someway comme ceci:moyen efficace de calculer Matrice Creuse norme 1, Inf-norme dans Eigen

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

maintenant j'ai clairsemés classe Eigen::SparseMatrix. Comment puis-je calculer efficacement ces normes dans ce cas?

Répondre

0

Vous pouvez calculer le colwise/rowwise norme 1 en utilisant un produit avec un vecteur de ceux:

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

Vérifier l 'ensemble généré pour voir si cela se suffisamment optimisé pour vos besoins. Sinon, ou si vous avez besoin d'autres lpNorm s, vous devrez peut-être écrire deux boucles imbriquées avec des itérateurs épars.