利用Python进行数据分析时,Numpy是最常用的库,经常用来对数组,矩阵等进行转置等,有时候用来做数据的存储。
在[1]:进口numpy np 在[2]:arr=np.arange (16) .reshape (2, 2, 4) 在[3]:加勒比海盗 [3]: 阵列([[[0,1,2,3], (4、5、6、7)), [(8、9、10、11), (12、13、14、15)]])
如上图所示,将0-15放在一个2 2 4的矩阵当中,得到结果如上。
现在要进行装置置操作,比如
在[4]:arr.transpose (1 0 2) [4]: 阵列([[[0,1,2,3], (8、9、10、11)), [(4、5、6、7) (12、13、14、15)]])
每一个元素都分析一下,0位置在(0,0,0),转置为[1 0 2],相当于把原来位置在(0,1,2)的转置到[1 0 2],对0来说,位置转置后为(0,0,0),同理,对1(0,0,1]来说,转置后为[0,0,1],同理我们写出所有如下:
其中第一列是值,第二列是转置前位置,第三列是转置后,看到转置后位置,再看如上的结果,是不是就豁然开朗了?
0 (0,0,0)(0,0,0) 1 (0,0,1][0,0,1] 2 (0,0,2)(0,0,2) 3 [0 0 3][0 0 3) 4 (0,1,0)(1,0,0) 5 (0,1,1)[1,0,1] 6 (0,1,2)[1 0 2] 7 (0,1,3)(1 0 3) 8 (1,0,0)(0,1,0) 9 [1,0,1][0,1,1) 10 [1 0 2][0,1,2) 11 [1 0 3][0,1,3) 12 [1 1 0][1 1 0] 13 (1 1 1)(1,1,1) 14 [1,2][1,2] 15 (1,1,3)(1,1,3)
<强>再看另一个结果:强>
在[20]:arr.T [20]: 阵列([[[0,8], [4,12]], [[1,9], [5,13]], [[2,10], [6、14]], [[3,11], [7、15]]]) 在[21]:arr.transpose (2, 1, 0) [21]: 阵列([[[0,8], [4,12]], [[1,9], [5,13]], [[2,10], [6、14]], [[3,11], [7、15]]])
<强>再对比转置前后的图看一下:强>
0 (0,0,0)(0,0,0) 1 (0,0,1](1,0,0) 2 (0,0,2)[2,0,0) 3 [0 0 3][3,0,0) 4 (0,1,0)(0,1,0) 5 [0,1,1][1 1 0] 6 (0,1,2)(2,1,0) 7 [0,1,3][3 1 0] 8 (1,0,0)[0,0,1] 9 [1,0,1][1,0,1] 10 [1 0 2][2,0,1] 11 [1 0 3][0,1] 12 [1 1 0][0,1,1) 13 (1 1 1)(1,1,1) 14 [1,2](2,1,1) 15 (1,1,3)[3 1 1]
瞬间就明白转置了吧!其实只要动手写写,都很容易明白的。另外T其实就是把顺序全部颠倒过来,如下:
在[22]:arr3=np.arange (16) .reshape (2, 2, 2, 2) 在[23]:arr3 [23]: 数组([[[[0,1], [2、3]], [(4、5), [6、7]]], [[(8、9), [10 11]], [[12 13], [14,15]]]]) 在[24]:arr3.T [24]: 数组([[[[0,8], [4,12]], [[2,10], [6、14]]], 9],[[[1 [5,13]], [[3,11], [7、15]]]]) 在[25]:arr3.transpose (3 2 1 0) [25]: 数组([[[[0,8], [4,12]], [[2,10], [6、14]]], 9],[[[1 [5,13]], [[3,11], [7、15]]]])
转置就是这样子,具体上面aar3转置前后的位置,就不写了。
话不多,上结果
在[27]:arr.swapaxes (1、2) [27]: 数组([[[0,4], (1、5), (2,6), [3,7]], [[8 12], (9、13), (10、14), [11、15]]]) 在[28]:arr.transpose (0、2、1) [28]: 数组([[[0,4], (1、5), (2,6), [3,7]], [[8 12], (9、13), (10、14), [11、15]]]) >之前发现了吧,其实swapaxes其实就是把矩阵中某两个轴对换一下,不信再看一个:
在[29]:arr3 [29]: 数组([[[[0,1], [2、3]], [(4、5), [6、7]]], [[(8、9), [10 11]], [[12 13], [14,15]]]]) 在[30]:arr3.swapaxes (1、3) [30]: 数组([[[[0,4), [2,6]], [[1,5], [3、7]]], [[[8 12], [10、14]], 13][[9日, [11、15]]]]) 在[31]:arr3.transpose (0、3、2、1) [31]: 数组([[[[0,4), [2,6]], [[1,5], [3、7]]], [[[8 12], [10、14]], 13][[9日, [11、15]]]])哈哈,只要动手做做,会发现其实没有那么困难,不能只看。
纸上得来终觉浅,绝知此事要躬行!共勉!
Numpy中转置转置,T和swapaxes的实例讲解