Numpy transpose函数的可视化理解

转自知乎观海云远的文章,做了部分的删改。

3维数组的小例子:

import numpy as np
t = np.arange(1,17).reshape(2, 2, 4)
print(t)

三维数组为:

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

 [[ 9 10 11 12]
  [13 14 15 16]]]

使用转置函数:

t1 = t.transpose(1, 0, 2)
print(t1)

转置结果为:

[[[ 1  2  3  4]
  [ 9 10 11 12]]

 [[ 5  6  7  8]
  [13 14 15 16]]]

上述结果初看较难直观理解。下文采用图示的方法对该函数进行解释。

 

高维数组在坐标系下的位置

三个维度(2, 2, 4)的index分别为0, 1, 2,即(2(第0维), 2(第1维), 4(第2维))。 如果建立如下坐标系:

图1 标准坐标系

在该坐标系内可视化三维数组t:

图2 标准坐标系下的三维数组t

 

在0轴上,[[1,2,3,4],[5,6,7,8]]下标为0,而[[9,10,11,12],[13,14,15,16]]的下标为1,所以两个子矩阵在0轴按先后顺序排列,绿色矩阵在0轴坐标0处,蓝色矩阵在0轴坐标1处。

在1轴上,[1,2,3,4]下标为0,[5,6,7,8]下标为1;[9,10,11,12]下标为0,[13,14,15,16]下标为1

在2轴上,1的下标为0,2的下标为1并依次类推,同样5的下标为0,6的下标为1,并依次类推,9,10,11,12与13,14,15,16也是类似。

坐标轴交换

语句t1 = t.transpose(1, 0, 2)相当于把0轴1轴位置进行了交换,2轴位置没有变化。

对比一下:t: (0, 1, 2) → t1: (1, 0, 2)。调整方向后的坐标系如下图所示(注意0轴、1轴的位置):

图3 交换0轴、1轴后的新坐标系

 

在新坐标系方向下,数组t的位置摆放可视化结果为:

图4中数组t仍按(2, 2, 4)对应(0轴, 1轴, 2轴)的方向摆放。

直观对比一下数组t在原坐标系和新坐标系下的视觉变化。

关键的一步:将数组在新坐标系下的摆放,原封不动地挪到原坐标系下,即得到了坐标轴变换后的新数组。

可以看出,在原坐标系下新摆放的数组为:

[[[ 1  2  3  4]
  [ 9 10 11 12]]

 [[ 5  6  7  8]
  [13 14 15 16]]]

进一步地,考虑3个轴都发生变化的情况:

t2 = t.transpose(2, 0, 1)

新旧坐标系对比:t: (0, 1, 2) → t1: (2, 0, 1).

图7 新旧坐标系对比

数组t在新坐标轴下的摆放:

前后摆放对比如图9:

图9 

 

将新的摆放位置放至原坐标系下的可视化结果:

 

运行验证一下:

t2 = t.transpose(2, 0, 1)
print(t2)

结果为:

[[[ 1  5]
  [ 9 13]]

 [[ 2  6]
  [10 14]]

 [[ 3  7]
  [11 15]]

 [[ 4  8]
  [12 16]]]
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值