2014-02-12 2 views
9

나는 do_magic 메서드를 사용하여 double을 취하고 거기에 42를 더합니다. 이 방법을 Eigen::Matrix 또는 Eigen::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 on m.data(). 그러나 위의 비용은 나중에 m (게으른 평가를 구현하기 때문에) 이후에 무엇을하는지에 따라 완벽하게 수용 될 수 있습니다. –

+0

답변과 댓글은 모두 내가 찾고있는 것입니다! 고맙습니다. –