2014-02-12 33 views
9

我有一个do_magic方法,它需要一个双精度值并将其加42。我想将这种方法应用于Eigen::MatrixEigen::Array的每个系数(也就是说,如果只有两种类型中的一种,我才会介意)。Eigen中系数自定义函数

这可能吗?

像这样:

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

回答

10

您可以使用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; 
} 
+4

我会补充,如果你需要做的效率,不相交并以这些元素的地方修改,你总是可以用丑陋的标准: :for_each在m.data()上。然而,上面的成本可能完全可以接受,这取决于你之后做什么(因为它实现了懒惰评估)。 –

+0

答案和评论都是我寻找的内容!谢谢。 –