2014-02-12 39 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

答案和評論都是我尋找的內容!謝謝。 –