C++ 有没有办法将std::函数应用于特征矩阵的每个元素?

C++ 有没有办法将std::函数应用于特征矩阵的每个元素?,c++,eigen,C++,Eigen,我有一个Eigen::MatrixXd,我想通过应用函数组件来修改它的所有元素。例如: MatrixXd m = ...; std::function<double(double)> f = ... m1 = m.apply(f); MatrixXd m=。。。; 函数f=。。。 m1=m.apply(f); 有什么方法可以达到这个效果吗?`你可以用蛮力的方式来达到这个效果,也就是说在一个双循环中: for (int j1; j1 < m.rows(); j1++){

我有一个Eigen::MatrixXd,我想通过应用函数组件来修改它的所有元素。例如:

MatrixXd m = ...;

std::function<double(double)> f = ...

m1 = m.apply(f);
MatrixXd m=。。。;
函数f=。。。
m1=m.apply(f);

有什么方法可以达到这个效果吗?`

你可以用蛮力的方式来达到这个效果,也就是说在一个双循环中:

for (int j1; j1 < m.rows(); j1++){
    for (int j2; j2 < m.cols(); j2++){
        m(j1, j2) = f(m(j1, j2));
    }
}
(int j1;j1{ 对于(int j2;j2您可以始终以蛮力方式进行操作,这意味着在双循环中:

for (int j1; j1 < m.rows(); j1++){
    for (int j2; j2 < m.cols(); j2++){
        m(j1, j2) = f(m(j1, j2));
    }
}
(int j1;j1{ 对于(int j2;j2模板成员函数使用调用运算符(函数指针、functor、lambda、
std::function
)获取任何内容,并将其应用于矩阵的每个元素。请记住,矩阵不能使用别名

#include <functional>
#include <iostream>
#include <Eigen/Core>

double square(double x)
{
    return x*x;
}

int main()
{
    Eigen::MatrixXd m = Eigen::MatrixXd::Random(2,2);
    std::cout << m << "\n";
    std::function<double(double)> func = square;
    m = m.unaryExpr(func);
    std::cout << m << "\n";
}
#包括
#包括
#包括
双正方形(双x)
{
返回x*x;
}
int main()
{
本征::矩阵XXD m=本征::矩阵XXD::随机(2,2);
std::cout模板成员函数使用调用运算符(函数指针、functor、lambda、
std::function
)获取任何内容,并将其应用于矩阵的每个元素。请记住,矩阵不能使用别名

#include <functional>
#include <iostream>
#include <Eigen/Core>

double square(double x)
{
    return x*x;
}

int main()
{
    Eigen::MatrixXd m = Eigen::MatrixXd::Random(2,2);
    std::cout << m << "\n";
    std::function<double(double)> func = square;
    m = m.unaryExpr(func);
    std::cout << m << "\n";
}
#包括
#包括
#包括
双正方形(双x)
{
返回x*x;
}
int main()
{
本征::矩阵XXD m=本征::矩阵XXD::随机(2,2);
标准::cout