Numpy transpose函数理解

现在我们有一个三维数组A

A=[
  [
    [ 0,  1,  2],
    [ 3,  4,  5],
    [ 6,  7,  8]
  ],
  [
    [ 9, 10, 11],
    [12, 13, 14],
    [15, 16, 17]
  ],
  [
    [18, 19, 20],
    [21, 22, 23],
    [24, 25, 26]
  ]
]

将A写成数组下标形式,即访问对应数字时需要的数组下标

A=[
       [
           [ (0,0,0) , (0,0,1) , (0,0,2)],
           [ (0,1,0) , (0,1,1) , (0,1,2)],
           [ (0,2,0) , (0,2,1) , (0,2,2)]
       ],

       [
           [ (1,0,0) , (1,0,1) , (1,0,2)],
           [ (1,1,0) , (1,1,1) , (1,1,2)],
           [ (1,2,0) , (1,2,1) , (1,2,2)]
       ],
       [
           [ (2,0,0) , (2,0,1) , (2,0,2)],
           [ (2,1,0) , (2,1,1) , (2,1,2)],
           [ (2,2,0) , (2,2,1) , (2,2,2)]
       ]
  ]

对A进行transpose操作,并输出结果

print(np.array(A).transpose()) #等价于np.array(A).transpose(0,1,2)
[[[ 0  9 18]
  [ 1 10 19]
  [ 2 11 20]]

 [[ 3 12 21]
  [ 4 13 22]
  [ 5 14 23]]

 [[ 6 15 24]
  [ 7 16 25]
  [ 8 17 26]]]

将得到的结果再次写成数组下标形式

B=[
       [
           [ (0,0,0) , (1,0,0) , (2,0,0)],
           [ (0,1,0) , (1,1,0) , (2,1,0)],
           [ (0,2,0) , (1,2,0) , (2,2,0)]
       ],

       [
           [ (0,0,1) , (1,0,1) , (2,0,1)],
           [ (0,1,1) , (1,1,1) , (2,1,1)],
           [ (0,2,1) , (1,2,1) , (2,2,1)]
       ],
       [
           [ (0,0,2) , (1,0,2) , (2,0,2)],
           [ (0,1,2) , (1,1,2) , (2,1,2)],
           [ (0,2,2) , (1,2,2) , (2,2,2)]
       ]
  ]

可以看出相对于A的数组下标形式来说相当于将访问顺序(0,1,2)变成了(2,1,0),即交换了原数组下标一维以及三维的访问顺序

为了验证这一发现,再次运行

print(np.array(A).transpose(1,0,2))

如果我们的发现是正确的,那么这次结果对应的数组下标应该为

C=[
       [
           [ (0,0,0) , (0,0,1) , (0,0,2)],
           [ (1,0,0) , (1,0,1) , (1,0,2)],
           [ (2,0,0) , (2,0,1) , (2,0,2)]
       ],

       [
           [ (0,1,0) , (0,1,1) , (0,1,2)],
           [ (1,1,0) , (1,1,1) , (1,1,2)],
           [ (2,1,0) , (2,1,1) , (2,1,2)]
       ],
       [
           [ (0,2,0) , (0,2,1) , (0,2,2)],
           [ (1,2,0) , (1,2,1) , (1,2,2)],
           [ (2,2,0) , (2,2,1) , (2,2,2)]
       ]
  ]

参照A得到对应的转换结果应该为

C=[
  [
    [ 0,  1,  2],
    [ 9, 11, 12],
    [18, 19, 20]
  ],
  [
    [ 3, 4, 5],
    [12, 13, 14],
    [21, 22, 23]
  ],
  [
    [6, 7, 8],
    [15, 16, 17],
    [24, 25, 26]
  ]
]

运行程序后得到运行结果

[[[ 0  1  2]
  [ 9 10 11]
  [18 19 20]]

 [[ 3  4  5]
  [12 13 14]
  [21 22 23]]

 [[ 6  7  8]
  [15 16 17]
  [24 25 26]]]

综上所述,对于多维数组来说np.transpose机制可以理解为将原数组的访问下标的顺序进行改变后访问原数组得到新的数组

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值