C++ 矩阵=矩阵。行()

C++ 矩阵=矩阵。行(),c++,matrix,eigen,C++,Matrix,Eigen,简单的问题,但无法解释原因: 输入 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

简单的问题,但无法解释原因:

输入

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

最后一个问题,为什么会是这样?

我终于明白了。 这是因为Eigen使用惰性计算,我们需要覆盖elementwise操作的惰性计算

所以这是可行的:

Ha = Ha.rowwise().reverse().eval();
这在Eigen的wiki中称为“别名”:


出于性能原因,我得到了它。但是为了发展,哦,我的上帝,这太令人讨厌了。谢谢你。