Aplicar función a todos los elementos de la matriz Eigen

Tengo un Eigen::MatrixXd y me gustaría modificar todos sus elementos mediante la aplicación de una función de componentes. Por ejemplo:

 MatrixXd m = ...; for each m[i][j]: m[i][j] = exp(m[i][j]); 

¿Hay alguna manera de lograr este resultado?

Sí, use la función de miembro Eigen::MatrixBase<>::unaryExpr() . Ejemplo:

 #include  #include  #include  double Exp(double x) // the functor we want to apply { return std::exp(x); } int main() { Eigen::MatrixXd m(2, 2); m << 0, 1, 2, 3; std::cout << m << std::endl << "becomes: "; std::cout << std::endl << m.unaryExpr(&Exp) << std::endl; } 

La respuesta de vsoftco es muy general y es buena para funciones personalizadas. Sin embargo, hay una manera más simple para muchas de las funciones comúnmente utilizadas. Adaptando su ejemplo podemos usar array s y se ve así:

 #include  #include  int main() { Eigen::MatrixXd m(2, 2); m << 0, 1, 2, 3; std::cout << m << "\nbecomes:\n"; std::cout << m.array().exp() << std::endl; return 0; }