转到源码中可以看到这句话:Returns a view of the array with axes transposed.
也就是该函数的作用是将数组按指定的轴来进行转置并返回结果。
先来看看二维数组:
import numpy as np
a = np.arange(16).reshape((4,4))
print(a)
'''
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
'''
a = np.transpose(a)
print(a)
'''
[[ 0 4 8 12]
[ 1 5 9 13]
[ 2 6 10 14]
[ 3 7 11 15]]
'''
二维数组比较直观,效果就是矩阵的转置
再来看看三维数组:
先创建一个三维数组:
a = np.arange(12).reshape((2,2,3))
print(a)
'''
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
'''
其中, reshape 函数中的参数 (2,2,3) 可以看作对应的轴:(x,y,z),也就是生成 2x2x3的矩阵
可将其想象到坐标轴中来进行理解:
矩阵中的用中层括号括起来的 [[ 0 1 2] 可看作在 x 轴中,也就是对应 x 轴坐标值为 0
[ 3 4 5]]
相对的 [[ 6 7 8] 在 x 轴中的坐标值为 1
[ 9 10 11]]
在 [ 0 1 2] 中,第一行在 y 轴中坐标为 0 ,第二行为 1,第一列在 z 轴中坐标为 0 ,以此类推...
[ 3 4 5]
按照这种对应方式,
0 的坐标为 (0,0,0),
3 的坐标为 (0,1,0),
6 的坐标为 (1,0,0),
11的坐标为 (1,1,2)
对该数组使用 transpose 方法,指定进行转换的坐标轴为 x,y 轴:
a = np.arange(12).reshape((2,2,3))
print(a)
'''
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
'''
a = np.transpose(a,(1,0,2))
print(a)
'''
[[[ 0 1 2]
[ 6 7 8]]
[[ 3 4 5]
[ 9 10 11]]]
'''
在 transpose 中的参数 (1,0,2) 可看作 (y,x,z) ,也就是 x 对应 0 ,y 对应 1 ,z 对应 2
对于矩阵的变化,就是交换了 x 轴 y 轴
比如原先 3 的坐标为(0,1,0)交换了 x y 之后变成了(1,0,0)也就是原先 6 的位置
对于 0,1,2 ,他们的坐标为 (0,0,*) ,9 ,10 ,11 的坐标为 (1,1, *) ,因此交换了 xy 位置也不变。
再来看复杂一些的变换:
a = np.arange(12).reshape((2,2,3))
print(a)
'''
[[[ 0 1 2]
[ 3 4 5]]
[[ 6 7 8]
[ 9 10 11]]]
'''
a = np.transpose(a,(2,0,1))
print(a)
'''
[[[ 0 3]
[ 6 9]]
[[ 1 4]
[ 7 10]]
[[ 2 5]
[ 8 11]]]
'''
上述的变换是 x->y ,y->z,z->x
3 的坐标原先为 (0,1,0) 变换之后 为 (0,0,1) 也就是它现在的位置
6 的坐标原先为 (1,0,0) 变换之后为 (0,1,0)
2 的坐标原先为 (0,0,2) 变换之后为 (2,0,0)
5 的坐标原先为 (0,1,2) 变换之后为 (2,0,1)
11 的坐标原先为 (1,1,2) 变换之后为 (2,1,1)
…
…