ndarray数组的转置(transpose)和轴对换
转置可以对数组进行重置,返回的是源数据的视图(不会进行任何复制操作)。
转置有三种方式,transpose
方法、T
属性以及swapaxes
方法。
1 .T
import numpy as np
arr = np.arange(9).reshape((3,3))#生成一个3行3列的数组
print arr
[[0 1 2]
[3 4 5]
[6 7 8]]
print arr.T
[[0 3 6]
[1 4 7]
[2 5 8]]
2. transpose
对于高维数组,transpose需要用到一个由轴编号组成的元组,才能进行转置。
比如说三维的数组,那就对维度进行编号,也就是0,1,2。这里的0,1,2可以理解为对shape返回元组的索引。
比如
arr1 = np.arange(24).reshape(2,3,4)#生成一个2*3*4的数组
print arr1
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
print arr1.shape #看形状
(2, 3, 4) #说明这是一个2*3*4的数组(矩阵),返回的是一个元组,可以对元组进行索引,也就是0,1,2
transpose((1,0,2))
的意义在于将 (2, 3, 4)
转成 (3, 2, 4)
,比如,数值12开始的索引是 [1,0,0]
,变换后变成了 [0,1,0]
,如下图:
print arr1.transpose((1,0,2))
[[[ 0 1 2 3]
[12 13 14 15]]
[[ 4 5 6 7]
[16 17 18 19]]
[[ 8 9 10 11]
[20 21 22 23]]]
3.swapaxes
swapaxes,它接受一对轴编号。进行轴对换。
arr1 = np.arange(24).reshape(2,3,4)
print arr1
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
print arr1.swapaxes(1,0) #将第一个轴和第二个轴交换,对比transpose(1,0,2)
[[[ 0 1 2 3]
[12 13 14 15]]
[[ 4 5 6 7]
[16 17 18 19]]
[[ 8 9 10 11]
[20 21 22 23]]]