numpy中transpose理解

  1. 先看个例子
import numpy as np
a = np.arange(16).reshape(2,2,4)
print(a)
print('='*20)
print(a.transpose(1,0,2))
  1. 结果
[[[ 0  1  2  3]
  [ 4  5  6  7]]
 [[ 8  9 10 11]
  [12 13 14 15]]]
 ====================
 [[[ 0  1  2  3]
  [ 8  9 10 11]]
 [[ 4  5  6  7]
  [12 13 14 15]]]
  1. 分析
  • transpose 中的 0,1,2a.shape 元组的下标
  • 我们从 a.shape 下手对数组元素进行坐标的转换
000 001 002 003
010 011 012 013
100 101 102 103
110 111 112 113

000 代表元素 0013 代表元素7100 代表元素 8 依次类推,我们可以通过 a[0,1,1] 取出对应元素

  • 由于我们交换的是 0,1,也就是 a.shape 元组下标的前两个,所以我们只要将坐标转换下就可以,比如 010 代表的元素 4 经过转换后则在新的数组中 100 代表 4,而 100 代表的元素 8 经过转换后则在新的数组中 010 代表 8,故元素转换后为
000 001 002 003
100 101 102 103
010 011 012 013
110 111 112 113

由于 a.shape 元组为 (2, 2, 4),只交换 1,2 下标并没有改变数组形状,故 a.transpose(1,0,2) 生成的新数组的坐标如下,只是其值改变了

000 001 002 003
010 011 012 013
100 101 102 103
110 111 112 113
  • 对于 a.transpose(2,1,0) 应该也是很好理解了。注意 a.transpose(2,1,0).shape(4,2,2)

你可能感兴趣的:(Python)