先来结论: transpose方法是对shape起作用的
这里直接以三维数组为例,看代码比较直观
arr2 = np.arange(24).reshape(2,3,4)
print(arr2)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
print(arr2.transpose(0, 1, 2))
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
# arr2是一个shape为(2,3,4)的矩阵,对它进行transpose操作。
首先对矩阵的维度进行编号,矩阵三个维度编号依次为0,1,2.
而transpose函数的参数输入就是基于这个编号的,调用transpose(0,1,2),那么矩阵将不发生变化
print(arr2.transpose())
[[[ 0 12]
[ 4 16]
[ 8 20]]
[[ 1 13]
[ 5 17]
[ 9 21]]
[[ 2 14]
[ 6 18]
[10 22]]
[[ 3 15]
[ 7 19]
[11 23]]]
# 如果不输入参数,直接调用transpose(),其效果就是将矩阵进行转置,
起作用等价与transpose(2,1,0),即shape从(2,3,4)变为(4,3,2)
# 以下验证我的理解,调用transpose(1, 0, 2),shape是否会从(2,3,4)变为(3,2,4)
print(arr2.transpose(1, 0, 2))
print(arr2.transpose(1, 0, 2).shape)
[[[ 0 1 2 3]
[12 13 14 15]]
[[ 4 5 6 7]
[16 17 18 19]]
[[ 8 9 10 11]
[20 21 22 23]]]
(3, 2, 4)
# 最后一次验证我们的理解,调用transpose(0, 2, 1),shape从(2,3,4)变为(2,4,3)
print(arr2.transpose(0, 2, 1))
print(arr2.transpose(0, 2, 1).shape)
[[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
[[12 16 20]
[13 17 21]
[14 18 22]
[15 19 23]]]
(2, 4, 3)
以上供参考。