如何在3D数组中旋转2D数组90度?

4

我有一个由2D数组组成的3D数组,我想在不改变次序的情况下仅旋转3D数组中的2D数组,使其成为一个由旋转后的3D数组组成的3D数组。

例如,我有一个如下的3D数组:

foo = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(foo)
>>> array([[[ 1,  2,  3],
            [ 4,  5,  6]],

           [[ 7,  8,  9],
            [10, 11, 12]]])
foo.shape
>>> (2, 2, 3)

我想将它旋转成这样。

rotated_foo = np.array([[[4, 1], [5, 2], [6, 3]], [[10, 7], [11, 8], [12, 9]]])
print(rotated_foo)
>>> array([[[ 4,  1],
            [ 5,  2],
            [ 6,  3]],

           [[10,  7],
            [11,  8],
            [12,  9]]])
rotated_foo.shape
>>> (2, 3, 2)

我尝试使用numpy库的rot90函数,但是得到了类似于这样的结果。

rotated_foo = np.rot90(foo)
print(rotated_foo)
>>> array([[[ 4,  5,  6],
            [10, 11, 12]],

           [[ 1,  2,  3],
            [ 7,  8,  9]]])
rotated_foo.shape
>>> (2, 2, 3)
3个回答

2
尝试使用 np.transposenp.flip 函数:
print(np.flip(np.transpose(foo, (0, 2, 1)), axis=2))

输出:

[[[ 4  1]
  [ 5  2]
  [ 6  3]]

 [[10  7]
  [11  8]
  [12  9]]]

2

您想要在与np.rot90相反的方向旋转90度,或者等效地按np.rot90方向旋转270 = 3 * 90度:

>>> np.rot90(foo, k=3, axes=(1, 2))
array([[[ 4,  1],
        [ 5,  2],
        [ 6,  3]],

       [[10,  7],
        [11,  8],
        [12,  9]]])

2
您可以使用numpy.rot90函数来设置您想要旋转的轴。
foo = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
rotated_foo  = np.rot90(foo, axes=(2,1))
print(rotated_foo)

输出:

array([[[ 4,  1],
        [ 5,  2],
        [ 6,  3]],

       [[10,  7],
        [11,  8],
        [12,  9]]])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接