Numpy数组transpose方法(1,0,2)轴置换的操作原理详解
NumPy中transpose((1,0,2))的轴变换过程详解
首先明确原数组的轴信息:你创建的my_array是形状为(2, 2, 4)的三维数组,三个轴的编号和对应维度大小分别是:
- 轴0(第一个维度):大小2,对应数组最外层的两个大区块
- 轴1(第二个维度):大小2,对应每个大区块内的两个子数组
- 轴2(第三个维度):大小4,对应每个子数组里的单个元素
transpose参数的核心含义
np.transpose((1, 0, 2))里的元组是新数组的轴与原数组轴的对应关系:
- 新数组的轴0 ↔ 原数组的轴1
- 新数组的轴1 ↔ 原数组的轴0
- 新数组的轴2 ↔ 原数组的轴2(保持不变)
简单说就是把原数组的轴0和轴1互换,轴2维持原样。
元素索引的映射规则
三维数组中每个元素的位置用(轴0索引, 轴1索引, 轴2索引)标记,比如原数组里的元素4,索引是(0, 1, 0);元素8的索引是(1, 0, 0)。
经过transpose((1,0,2))变换后,元素的新索引变为(原轴1索引, 原轴0索引, 原轴2索引):
- 原索引
(0,1,0)的元素4,新索引是(1,0,0),对应结果数组第二块第一行的第一个元素 - 原索引
(1,0,0)的元素8,新索引是(0,1,0),对应结果数组第一块第二行的第一个元素
结合数组结构看变换过程
原数组的结构是:
# 轴0的两个区块 区块0:[[0,1,2,3], [4,5,6,7]] # 轴1的两个子数组 区块1:[[8,9,10,11], [12,13,14,15]]
变换后,轴0和轴1互换,相当于把原轴1的子数组作为新数组的轴0区块,同时把原轴0的区块作为新数组每个轴1位置的子数组:
- 新数组的区块0(轴0=0):取原数组每个轴0区块里轴1=0的子数组 → 原区块0的[0,1,2,3] + 原区块1的[8,9,10,11]
- 新数组的区块1(轴0=1):取原数组每个轴0区块里轴1=1的子数组 → 原区块0的[4,5,6,7] + 原区块1的[12,13,14,15]
最终得到的结果和你给出的变换后数组完全匹配。
内容的提问来源于stack exchange,提问作者meKafka
相关产品推荐
相关产品推荐

