3

我正在使用 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()?)

4

3 回答 3

8

如果你想要一个通用的翻转,即不仅仅是一个 3x3 矩阵,那么这个reverse()函数就是你要找的。特别是A.colwise().reverse()将反转每一列,从而进行垂直翻转。对于水平翻转:A.rowwise().reverse().

于 2013-10-31T15:01:22.227 回答
5

您只需要在正确的位置与另一个 0 和 1 的 3x3 矩阵相乘。我想你可以从那里用笔和纸解决它。我会给你一个提示:解决方案中只有 3 个。

.. 好的:

[0 0 1]
[0 1 0]
[1 0 0]
于 2013-10-29T00:02:10.220 回答
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
于 2013-10-29T00:13:00.070 回答