最近在学深度学习时,碰到许多关于Numpy的知识点,边学边做点笔记,方便记忆。
此篇文章用来学习Numpy Transpose函数。
————————————————————————————————
得到一个三维矩阵:
[[[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] [[12 13 14] [15 16 17] [18 19 20] [21 22 23]]]array.shape = (2,4,3)
第一个参数表示此三维矩阵中存在2个二维矩阵;第二个、第三个参数表示其中二维矩阵为4行3列矩阵,故shape为(2,4,3),且三个参数顺序分别对应索引号(0,1,2),2的索引号对应0,4的索引号对应1,3的索引号对应2。
————————————————————————————————
进行transpose变形
transpose中参数(1,0,2)表示对第一个索引号与第二个索引号对应数字进行交换,结合上述array的实际情况,array.shape变为(4,2,3),此shape参数表示新的三维矩阵b中存在4个二维矩阵;第二个、第三个参数表示其中二维矩阵为2行3列矩阵,得到以下矩阵。
[[[ 0 1 2] [12 13 14]] [[ 3 4 5] [15 16 17]] [[ 6 7 8] [18 19 20]] [[ 9 10 11] [21 22 23]]]新得到b矩阵从shape上来看,与推论一致,但究竟是怎么来的呢,请看下面推导。
————————————————————————————————
原先array矩阵如下,把其中每个元素索引号写出,见括号内。
(只写了第一块矩阵,第二块矩阵可以自己动手完成)
transpose表面上是对矩阵shape的索引号进行相应变换,但实质上,它是对其中每个元素索引号进行相应变换,transpose(1,0,2),就是将每个元素第一个索引号与第二个索引号进行互换,可得变化后的元素对应索引号。
[[[ 0(0,0,0) 1(0,0,1) 2(0,0,2)] [ 3(1,0,0) 4(1,0,1) 5(1,0,2)] [ 6(2,0,0) 7(2,0,1) 8(2,0,2)] [ 9(3,0,0) 10(3,0,1) 11(3,0,2)]] [[12 13 14] [15 16 17] [18 19 20] [21 22 23]]]然后,将数字放入现在索引号对应的正确位置。
[[[0(0,0,0) 1(0,0,1) 2(0,0,2)] [12 13 14]] [[3(1,0,0) 4(1,0,1) 5(1,0,2)] [15 16 17]] [[6(2,0,0) 7(2,0,1) 8(2,0,2)] [18 19 20]] [[ 9(3,0,0) 10(3,0,1) 11(3,0,2)] [21 22 23]]]这样就可以得到最终的正确答案。
二维矩阵的transpose更加简单,另外维度的transpose也是一样的原理。
转载请注明原处