numpy中的transpose
numpy中最难理解的就是轴的transpose(转置)了,下面用实例说明它是如何进行转置的。
传给transpose的参数是以轴编号组成的元组,返回的结果是源数据的视图,而不是拷贝,即对transpose的修改都会反应到原始数据上。
arr = np.arange(16).reshape((2,2,4))#2,2,4分别对应0,1,2轴
print("arr:")
print(arr.shape)
print(arr)
out
arr:
(2, 2, 4)
[[[ 0 1 2 3]
[ 4 5 6 7]]
[[ 8 9 10 11]
[12 13 14 15]]]
arr2 = arr.transpose((1,0,2))#这里就是对应的轴编号。
print("1和0轴转换后:")
print(arr2)
out
1和0轴转换后:
[[[ 0 1 2 3]
[ 8 9 10 11]]
[[ 4 5 6 7]
[12 13 14 15]]]
这里貌似看不出来它是怎么转的。原来的shape为(2,2,4),对应的轴为(0,1,2),现在transpose((1,0,2)),即轴1和0轴进行了转换,拿其中的几个数举例。
原来数字8的位置:(1,0,0),转换后的位置:(0,1,0),正是1和0轴进行了对调。
原来的数字12位置:(1,1,0),因为其轴0和轴1的位置都是1,所以转换后的位置没变,还是(1,1,0)。
下面再看1和2轴的转换也就类似了。
arr3 = arr.transpose((0,2,1))
print("1和2轴转换后:")
print(arr3)
out
1和2轴转换后:
[[[ 0 4]
[ 1 5]
[ 2 6]
[ 3 7]]
[[ 8 12]
[ 9 13]
[10 14]
[11 15]]]
同样举例:
原来数字1的位置:(0,0,1),对调后就变成了(0,1,0),正是1和2轴的位置换了下。
数字11的位置:(1,0,3),对调后就变成了(1,3,0),也正是1和2轴的位置换了下。