Python NumPy如何对三维数组沿中心执行rot90旋转变换
NumPy三维数组批量应用二维切片旋转方案
核心实现
不需要写循环逐一切片处理,np.rot90原生支持高维数组批量操作,只要通过axes参数指定旋转作用的二维平面对应的轴即可。
针对你形状为(n, 3, 3)的三维数组,所有二维切片分布在后两个维度(行轴=1,列轴=2),直接传入axes=(1,2)参数,就能一次性对所有切片执行和单切片np.rot90(slice, 3)完全一致的变换:
import numpy as np # 这里替换成你的目标三维数组 arr = np.array([ [['6', '7b', '1'], ['3', '4', '5'], ['7b', '1', '2']], [['3', '4', '5'], ['7', '1', '2'], ['4', '5', '6']], [['7', '1', '2'], ['4s', '5', '6'], ['1', '2', '3']] ]) # 批量旋转所有二维切片 result = np.rot90(arr, k=3, axes=(1, 2))
效果核对
执行后输出的result和你给出的变换规则完全匹配:
- 第一个原切片旋转结果为
[['7b' '3' '6'], ['1' '4' '7b'], ['2' '5' '1']],和示例一致 - 第二个原切片旋转结果为
[['4' '7' '3'], ['5' '1' '4'], ['6' '2' '5']],和示例一致 - 第三个原切片旋转结果为
[['4s' '1' '7'], ['2' '5' '1'], ['3' '6' '2']],符合同等变换逻辑
补充说明
- 单二维数组调用
np.rot90(arr, 3)时,默认操作的是(0,1)轴,对应二维数组的行、列维度 - 三维数组场景下指定
axes=(1,2),就是告诉函数只在每个切片的行、列构成的平面上做旋转,沿第0轴的切片维度保持不变,自动批量完成所有切片处理,运行效率比手写Python循环高1~2个数量级。
内容的提问来源于stack exchange,提问作者user2315546
相关产品推荐
相关产品推荐

