2017-12-27 14 views
1

Einfache Frage, kann aber nicht verstehen, warum:Matrix = Matrix.rowwise() reverse() eine Matrix Eigen zeilenweise umkehren und es zuweisen zurück macht jede Zeile symmetrisch

Eingang

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; 

Ausgabe

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

Für die letzte, warum der Fall ist?

Antwort

3

Nun, habe ich endlich herausgefunden. Dies ist, weil Eigen faule Auswertung verwenden und wir die faule Bewertung der elementweisen Operation überschreiben müssen.

So funktioniert das:

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

Dies wird als "Aliasing" in Eigens Wiki genannt:

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

Verwandte Themen