- 先看个例子
import numpy as np
a = np.arange(16).reshape(2,2,4)
print(a)
print('='*20)
print(a.transpose(1,0,2))
- 结果
[[[ 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]]]
- 分析
transpose
中的0,1,2
是a.shape
元组的下标- 我们从
a.shape
下手对数组元素进行坐标的转换
000 001 002 003
010 011 012 013
100 101 102 103
110 111 112 113
000
代表元素 0
,013
代表元素7
,100
代表元素 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)