现在我们有一个三维数组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]]]