简单的问题,但无法弄清楚原因:
输入
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使用惰性计算,因此我们需要覆盖元素操作的惰性计算。
所以这有效:
Ha = Ha.rowwise().reverse().eval();
在Eigen的Wiki中,这称为“别名”:
https://eigen.tuxfamily.org/dox/group__TopicAliasing.html