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