【3】数据分析-1-数据的处理--numpy--3--转置(transpose/t/swapaxes)
转置可以对数组进行重置,返回的是源数据的视图(不会进行任何复制操作)。
转置有三种方式,transpose方法、T属性以及swapaxes方法。
一、T,适用于一、二维数组
In [1]: import numpy as np
In [2]: arr = np.arange(20).reshape(4,5)#生成一个4行5列的数组
In [3]: arr
Out[3]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
In [4]: arr.T #求转置
Out[4]:
array([[ 0, 5, 10, 15],
[ 1, 6, 11, 16],
[ 2, 7, 12, 17],
[ 3, 8, 13, 18],
[ 4, 9, 14, 19]])
二、高维数组
对于高维数组,transpose需要用到一个由轴编号组成的元组,才能进行转置。
对多维数组来说,确定最底层的一个基本元素位置需要用到的索引个数即是维度。这句话的理解可以结合我索引和切片的那篇文章理解。
我是这样的理解的,比如说三维的数组,那就对维度进行编号,也就是0,1,2。这样说可能比较抽象。这里的0,1,2可以理解为对shape返回元组的索引。 比如:
In [59]: arr1 = np.arange(12).reshape(2,2,3)
In [60]: arr1
Out[60]:
array([[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]]])
In [61]: arr1.shape #看形状
Out[61]: (2, 2, 3) #说明这是一个2*2*3的数组(矩阵),返回的是一个元组,可以对元组进行索引,也就是0,1,2
形状 | 索引 |
---|---|
2 | 0 |
2 | 1 |
3 | 2 |
这个索引很重要,索引决定了单个元素数据在数组中的位置,其实转置的时候,调整的就是索引对应值。举个例子,比如某个元素的在数组中的位置是(1,2,3),这个位置对应的索引顺序就是(0,1,2),如果改变索引为(1,0,2),则该元素的位置就变成了(2,1,3)。懂了吧???
所以说,transpose参数的真正意义在于这个shape元组的索引。
In [62]: arr1.transpose((1,0,2))
Out[62]:
array([[[ 0, 1, 2],
[ 6, 7, 8]],
[[ 3, 4, 5],
[ 9, 10, 11]]])
比如,数值6开始的索引是[1,0,0],变换后变成了[0,1,0]。 这也说明了,transpose依赖于shape。
三、swapaxes
swapaxes方法也就很好理解了。它接受一对轴编号。进行轴对换。其实也就是shape参数
In [67]: arr2 = np.arange(16).reshape(2,2,4)
In [68]: arr2
Out[68]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
In [69]: arr2.shape
Out[69]: (2, 2, 4)
In [70]: arr2.swapaxes(1,2)
Out[70]:
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])
In [4]: arr2.swapaxes(1,0)#转置,对比transpose(1,0,2)
Out[4]:
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
参考资料
这里是一个广告位,,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn