【问题标题】:Is there a way to apply a std::function to each element of an EIGEN matrix? [duplicate]有没有办法将 std::function 应用于 EIGEN 矩阵的每个元素? [复制]
【发布时间】:2017-12-12 23:14:14
【问题描述】:

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

MatrixXd m = ...;

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

m1 = m.apply(f);

有没有办法达到这个结果?`

【问题讨论】:

    标签: c++ eigen


    【解决方案1】:

    unaryExpr 模板成员函数使用调用运算符(函数指针、函子、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";
    }
    

    【讨论】:

      【解决方案2】:

      你可能总是用蛮力的方式来做这件事,这意味着在一个双循环中:

      for (int j1; j1 < m.rows(); j1++){
          for (int j2; j2 < m.cols(); j2++){
              m(j1, j2) = f(m(j1, j2));
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-12
        相关资源
        最近更新 更多