python编程精要(3)---numpy中的transpose

匿名 (未验证) 提交于 2019-12-02 22:54:36

numpy中最难理解的就是轴的transpose(转置)了,下面用实例说明它是如何进行转置的。
传给transpose的参数是以轴编号组成的元组,返回的结果是源数据是视图,而不是拷贝,即对transpose的修改都会反应到原始数据上。
另外注意下,因为上一节刚讲了引用和拷贝,而且也说了“python中的赋值操作一般都是储存对象的引用,而不是这些对象的拷贝 ”,但是numpy本来就是被设计用来处理大数据的,为了提升效率,所以numpy中的大部分都是对原始视图的操作。

arr = np.arange(16).reshape((2,2,4))#2,2,4分别对应0,1,2轴 print("arr:") print(arr.shape) print(arr)

out

arr: (2, 2, 4) [[[ 0  1  2  3]   [ 4  5  6  7]]   [[ 8  9 10 11]   [12 13 14 15]]]
arr2 = arr.transpose((1,0,2))#这里就是对应的轴编号。 print("1和0轴转换后:") print(arr2)

out

10轴转换后: [[[ 0  1  2  3]   [ 8  9 10 11]]   [[ 4  5  6  7]   [12 13 14 15]]]

这里貌似看不出来它是怎么转的。原来的shape为(2,2,4),对应的轴为(0,1,2),现在transpose((1,0,2)),即轴1和0轴进行了转换,拿其中的几个数举例。

原来数字8的位置:(1,0,0),转换后的位置:(0,1,0),正是1和0轴进行了对调。

原来的数字12位置:(1,1,0),因为其轴0和轴1的位置都是1,所以转换后的位置没变,还是(1,1,0)。

下面再看1和2轴的转换也就类似了。

arr3 = arr.transpose((0,2,1)) print("1和2轴转换后:") print(arr3)

out

12轴转换后: [[[ 0  4]   [ 1  5]   [ 2  6]   [ 3  7]]   [[ 8 12]   [ 9 13]   [10 14]   [11 15]]] 

同样举例:

原来数字1的位置:(0,0,1),对调后就变成了(0,1,0),正是1和2轴的位置换了下。

数字11的位置:(1,0,3),对调后就变成了(1,3,0),也正是1和2轴的位置换了下。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!