numpy之transpose详解

transpose用于numpy中高维度数组的轴变换,非常不好理解,我用自己的理解以三维数组来举例:
transpose()括号中传入的参数通常为0,1,2,可以将0看作0轴,1看作1轴,2看作2轴;对于三维数组(a,b,c)来说,可以把它看作是a个b行c列的数组。拿

 arr = np.arange(0,16).reshape(2,2,4)

这个数组来举例
在这里插入图片描述
这个数组的维度是(2,2,4),可以把它看作两个两行四列的矩阵,第一个是
在这里插入图片描述
第二个是
在这里插入图片描述
把这个矩阵分解写成下边这种格式:

竖着看
arr[0][0][0] = 0	arr[1][0][0] = 8
arr[0][0][1] = 1	arr[1][0][1] = 9 
arr[0][0][2] = 2	arr[1][0][2] = 10
arr[0][0][3] = 3	arr[1][0][3] = 11
arr[0][1][0] = 4	arr[1][1][0] = 12
arr[0][1][1] = 5	arr[1][1][1] = 13
arr[0][1][2] = 6	arr[1][1][2] = 14
arr[0][1][3] = 7	arr[1][1][3] = 15

第一个[]是数组的0维,第二个[]是数组的1维,第三个[]是数组的2维


再回到transpose上,transpose的括号中的参数代表的就是数组的维度.
transpose(0,1,2)表示三个维度不发生交换,还是原来的数组;
transpose(1,0,2)表示第0维度和第1维度发生交换,也就是将arr[][][]数组中第0个[]和第1个[]中的数字发生交换,原数组的形状是(2,2,4),交换以后仍然是(2,2,4),形状不变但是内容却变了。例如将arr[0][1][0] = 4换成arr[1][0][0]=4,将arr[1][0][0]=8换成arr[0][1][0]=8,以此类推

竖着看
arr[0][0][0] = 0	arr[1][0][0] = 4
arr[0][0][1] = 1	arr[1][0][1] = 5 
arr[0][0][2] = 2	arr[1][0][2] = 6
arr[0][0][3] = 3	arr[1][0][3] = 7
arr[0][1][0] = 8	arr[1][1][0] = 12
arr[0][1][1] = 9	arr[1][1][1] = 13
arr[0][1][2] = 10	arr[1][1][2] = 14
arr[0][1][3] = 11	arr[1][1][3] = 15

转换成数组格式就是
在这里插入图片描述
transpose(0,2,1)就是将第1维度和第2维度交换,也就是将arr[][][]中第1个[]和第二个[]交换,数组维度由原来的(2,2,4)变成(2,4,2);arr[0][1][2]=10换成arr[0][2][1]=10,注意原来的数组没有arr[0][2][1],所以要生成新的,将arr[0][1][2]去掉,数组的维度也因此发生了变化。

竖着看
arr[0][0][0] = 0	arr[1][0][0] = 8
arr[0][0][1] = 4	arr[1][0][1] = 12 
arr[0][1][0] = 1	arr[1][1][0] = 9
arr[0][1][1] = 5	arr[1][1][1] = 13
arr[0][2][0] = 2	arr[1][2][0] = 10
arr[0][2][1] = 6	arr[1][2][1] = 14
arr[0][3][0] = 3	arr[1][3][0] = 11
arr[0][3][1] = 7	arr[1][3][1] = 15

转换成数组格式为
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章