You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对3D数组内的每个2D数组单独执行90度旋转?

NumPy 3D数组逐2D子数组90度旋转实现

问题场景

现有一个由多个2D数组堆叠构成的3D NumPy数组,需要在不改变内部2D数组原有排列顺序的前提下,对每个内嵌的2D数组单独执行90度旋转,最终得到由旋转后2D数组组成的新3D数组。

示例原始数组:

import numpy as np
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]]])

期望结果形状为(2, 3, 2)。

直接调用无参数的np.rot90(foo)无法得到预期结果,输出如下:

array([[[ 4,  5,  6],
        [10, 11, 12]],

       [[ 1,  2,  3],
        [ 7,  8,  9]]])

返回数组形状仍为(2, 2, 3),本质是对整个3D数组做了旋转,而非逐个处理内部2D子数组。

解决方法

出现上述问题的原因是np.rot90默认对数组的前两个维度执行旋转操作,没有指定操作维度时会打乱第0维(也就是子数组堆叠的维度)的顺序。只要通过axes参数明确指定旋转作用在每个子数组对应的两个维度即可:

rotated_foo = np.rot90(foo, k=1, axes=(1, 2))

执行后验证结果,和预期完全一致:

print(rotated_foo)
# 输出
# array([[[ 4,  1],
#         [ 5,  2],
#         [ 6,  3]],
#
#        [[10,  7],
#         [11,  8],
#         [12,  9]]])

rotated_foo.shape
# 输出 (2, 3, 2)

参数说明

  • k:旋转次数,k=1为逆时针旋转90度,k=2为旋转180度,k=3为顺时针旋转90度
  • axes=(1,2):指定旋转操作作用在索引为1、2的两个维度上,也就是每个2D子数组的行、列维度,索引为0的子数组堆叠维度保持不变,不会改变原有2D数组的排列顺序。

内容的提问来源于stack exchange,提问作者A'S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:15:42