如何镜像关于其中一个维度的矩阵?

时间:2013-10-28 23:54:54

标签: c++ eigen

我正在使用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()的某种组合?)

3 个答案:

答案 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