我正在使用Eigen,但由于eigen使用基本的数学运算符,这基本上只是一个数学问题。这是我所追求的伪代码:
[1 2 3]
A = [4 5 6]
[7 8 9]
[7 8 9]
A.flipv() = [4 5 6]
[1 2 3]
我怎样才能在Eigen中实现这样的目标? (我使用的是3.2版本)
编辑:我认为我想在这里做的是将顶行与底行交换(.topRows()
,.bottomRows()
和.swap()
的某种组合?)
答案 0 :(得分:4)
你只需要在正确的位置乘以另外的3x3矩阵,零和1。我想你可以用笔和纸来解决它。 我给你一个提示:解决方案中只有3个。
..好的:
[0 0 1]
[0 1 0]
[1 0 0]
答案 1 :(得分:4)
如果您想要一般翻转,即不仅仅是3x3矩阵,那么reverse()
功能就是您正在寻找的功能。特别是A.colwise().reverse()
将反转每列,从而进行垂直翻转。对于水平翻转:A.rowwise().reverse()
。
答案 2 :(得分:2)
我可以给你两个可能的解决方案:
1
如果矩阵中有n行,则可以执行以下操作: 对于前n / 2行中的任何元素,假设它位于第i行和第j列,我们从0开始索引行和列,然后您可以将M [i,j]与M [n]交换 - 1 - i,j],结果与描述一致。
2
第二个解决方案是Johan Lundberg的解决方案:
让我们考虑
的矩阵0 0 1
0 1 0
1 0 0
I x M会产生您想要的矩阵。例如:
0 0 1 1 2 3 7 8 9
0 1 0 x 4 5 6 = 4 5 6
1 0 0 7 8 9 1 2 3