注意
.T 适用于一、二维数组的转置
.transpose 适用于高维数组,需要用到一个由轴编号组成的元组,才能进行转置
完整代码
import numpy as np
arr = np.arange(24).reshape(2,3,4)
print('原3维数组arr:\n',arr)
print('3个维度:',arr.shape)
print('----------------')
arr1=arr.transpose((1,0,2))
print('新3维数组arr1:\n',arr1)
print('3个维度:',arr1.shape)
print('----------------')
arr2=arr.transpose((0,2,1))
print('新3维数组arr2:\n',arr2)
print('3个维度:',arr2.shape)
print('----------------')
arr3=arr.transpose((1,2,0))
print('新3维数组arr3:\n',arr3)
print('3个维度:',arr3.shape)
print('----------------')
arr4=arr.reshape((3,2,4))#transpose不同于reshape
print('arr4:\n',arr4)
print('3个维度:',arr4.shape)
arr5=arr[:,:,::-1]#从尾到头
print('arr5:\n',arr5)
print('3个维度:',arr5.shape)
运行结果
原3维数组arr:
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
3个维度: (2, 3, 4)
----------------
新3维数组arr1:
[[[ 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个维度: (3, 2, 4)
----------------
新3维数组arr2:
[[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
[[12 16 20]
[13 17 21]
[14 18 22]
[15 19 23]]]
3个维度: (2, 4, 3)
----------------
新3维数组arr3:
[[[ 0 12]
[ 1 13]
[ 2 14]
[ 3 15]]
[[ 4 16]
[ 5 17]
[ 6 18]
[ 7 19]]
[[ 8 20]
[ 9 21]
[10 22]
[11 23]]]
3个维度: (3, 4, 2)
----------------
arr4:
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]
[[16 17 18 19]
[20 21 22 23]]]
3个维度: (3, 2, 4)
arr5:
[[[ 3 2 1 0]
[ 7 6 5 4]
[11 10 9 8]]
[[15 14 13 12]
[19 18 17 16]
[23 22 21 20]]]
3个维度: (2, 3, 4)
画龙点睛
原三维数组 arr 三个维度 (2,3,4) 对应的是 (0,1,2) 三个索引
transpose 函数可以理解为改变数组数值的映射关系,原数组6这个数所在的索引是(0,1,2)
arr1 = arr.transpose((1,0,2))
的操作相当于把原三维数组 arr 的第一个维度和第二个维度调换【新数组6这个数所在的索引是(1,0,2)】
arr2 = arr.transpose((0,2,1))
的操作相当于把原三维数组 arr 的第二个维度和第三个维度调换【新数组6这个数所在的索引是(0,2,1)】
原数组 arr (2,3,4)
新数组 arr1 (3,2,4)
新数组arr2 (2,4,3)
参考链接:
numpy之转置(transpose)和轴对换