Transposing Arrays and Swapping Axes
这一部分笔记虽然少,但是我在学习这部分的时候感觉有点难理解,于是单独提出来作为一个独立的笔记来记录。
转置数组(交换坐标轴):
(一)对于二维数组来说:
In [80]: arr=np.arange(15).reshape((3,5))
In [81]: arr
Out[81]:
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]])
In [82]: arr.T
Out[82]:
array([[ 0, 5, 10],
[ 1, 6, 11],
[ 2, 7, 12],
[ 3, 8, 13],
[ 4, 9, 14]])
这个比较好理解:
二维数组,先读X轴的元素,转置后,先按照Y轴的顺序读取元素这个转置有点像我们把表达矩阵进行转置是一样的道理,x轴变y轴,y轴变x轴。理解起来也很容易。
(二)对于多维数组来说:
情况就比较的复杂:
#首先生成一个三维数组:
In [83]: arr = np.arange(16).reshape((2, 2, 4)) #这里的2,2,4你可以把这三个数分别分配为0轴,1轴,和2轴
In [84]: arr #这是原始数组的排列方式
Out[84]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
In [86]: arr.transpose((1,0,2)) #这是转置之后的排列方式,这个转置是将0轴和1轴的位置交换后的结果
Out[86]:
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
这里有些难以理解,我在网上查看了一些文章对 arr.transpose
功能的解析,很多人是画了一个三维坐标轴来进行理解的,比如说这篇文章:Python numpy.transpose 详解。无奈我当年立体几何学的太差,空间想象能力不好,于是自己琢磨了另一种理解的方式,比较笨拙,但是不用太费脑细胞:
那么同样的道理,下面这个转置的方法就不难理解了,0轴不动,把1轴和2轴的位置互换一下:
In [87]: arr.transpose((0,2,1))
Out[87]:
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])
这里可以看到,数组的结构发生了改变,是因为每一个数对应的索引变化很大,同样,我列出了所有数字的索引变化前后的情况:
上面的表格可以看出,之前原数组的1轴只有0和1的索引位置,但是在变化后,1轴的索引数有0,1,2,3四种情况,所以这时我们的数组结构不再是以前的结构了:
其实这里1轴和2轴交换也可以用arr.swapaxes
功能实现:
In [91]: arr.swapaxes(1,2)
Out[91]:
array([[[ 0, 4],
[ 1, 5],
[ 2, 6],
[ 3, 7]],
[[ 8, 12],
[ 9, 13],
[10, 14],
[11, 15]]])
网友评论