2017-12-27 38 views
1

간단한 질문 대칭 각 행을 만들지 만, 알 수없는 이유 :매트릭스 = Matrix.rowwise()() 역 아이겐 매트릭스를 반전하고 다시 지정 rowwise는

입력

Eigen::MatrixXd Ha(2, 3); 
Ha << 1, 2, 3, 4, 5, 6; 
std::cout << "Ha: " << std::endl << Ha << std::endl; 

Ha.rowwise().reverse(); 
std::cout << "Ha: " << std::endl << Ha.rowwise().reverse() << std::endl; 

Ha = Ha.rowwise().reverse(); 
std::cout << "Ha: " << std::endl << Ha.rowwise().reverse() << std::endl; 

출력

Ha: 
1 2 3 
4 5 6 
Ha: 
3 2 1 
6 5 4 
Ha: 
3 2 3 
6 5 6 

마지막으로, 왜 그렇습니까?

답변

3

글쎄, 나는 마침내 알아 냈다. Eigen은 lazy evaluation을 사용하기 때문에 우리는 elementwise 연산의 lazy evaluation을 override 할 필요가있다.

그래서이 작동합니다

Ha = Ha.rowwise().reverse().eval(); 

이 아이겐의 위키에서 "앨리어싱"라고합니다 :

https://eigen.tuxfamily.org/dox/group__TopicAliasing.html