【问题标题】:Coefficient-wise custom functions in EigenEigen 中的系数自定义函数
【发布时间】:2014-02-12 12:43:58
【问题描述】:

我有一个 do_magic 方法,它接受一个 double 并添加 42。我想将此方法应用于Eigen::MatrixEigen::Array 的每个系数(这意味着,我不介意它是否只能用于两种类型中的一种)。

这可能吗?

像这样:

Eigen::MatrixXd m(2, 2);    
m << 1,2,1,2;    
m.applyCoefficientWise(do_magic);
// m is now 43, 44, 43, 44

【问题讨论】:

    标签: c++ eigen


    【解决方案1】:

    您可以使用unaryExpr,尽管这会返回一个新的矩阵视图,而不是允许您修改元素。

    从文档中复制示例:

    double ramp(double x)
    {
      if (x > 0)
        return x;
      else 
        return 0;
    }
    int main(int, char**)
    {
      Matrix4d m1 = Matrix4d::Random();
      cout << m1 << endl << "becomes: " << endl << m1.unaryExpr(ptr_fun(ramp)) << endl;
      return 0;
    }
    

    【讨论】:

    • 我会补充一点,如果你需要对元素进行高效、不相交和适当的修改,你总是可以在 m.data() 上使用丑陋的 std::for_each。然而,上面的成本可能完全可以接受,具体取决于您之后对 m 所做的事情(因为它实现了惰性评估)。
    • 答案和评论都是我想要的!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多