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
1和0轴转换后: [[[ 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
1和2轴转换后: [[[ 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轴的位置换了下。