我有一個Eigen::MatrixXd
,我想通過組件式地應用一個函數來修改它的所有元素。例如:將函數應用於所有特徵矩陣元素
MatrixXd m = ...;
for each m[i][j]:
m[i][j] = exp(m[i][j]);
有沒有辦法實現這個結果?
我有一個Eigen::MatrixXd
,我想通過組件式地應用一個函數來修改它的所有元素。例如:將函數應用於所有特徵矩陣元素
MatrixXd m = ...;
for each m[i][j]:
m[i][j] = exp(m[i][j]);
有沒有辦法實現這個結果?
是的,使用Eigen::MatrixBase<>::unaryExpr()
成員函數。例如:
#include <cmath>
#include <iostream>
#include <Eigen/Core>
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;
}
這是正確的嗎? 「m.unaryExpr(&std :: exp)」 –
@XingShi不,因爲['std :: exp'](http://en.cppreference.com/w/cpp/numeric/math/exp)有重載,並且'unaryExpr'不能從'std :: exp'單獨推導函子簽名(即,有超過1個候選)。如果你通過指定函子類型來「幫助」編譯器,比如'm.unaryExpr(&std :: exp)',它就可以工作。 –
vsoftco
非常感謝,你是對的。 –