numpy 中的 transpose() 函数理解

转到源码中可以看到这句话:Returns a view of the array with axes transposed.
也就是该函数的作用是将数组按指定的轴来进行转置并返回结果

先来看看二维数组:

import numpy as np

a = np.arange(16).reshape((4,4))
print(a)
'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
'''
a = np.transpose(a)
print(a)
'''
[[ 0  4  8 12]
 [ 1  5  9 13]
 [ 2  6 10 14]
 [ 3  7 11 15]]
'''

二维数组比较直观,效果就是矩阵的转置

再来看看三维数组:

先创建一个三维数组:

a = np.arange(12).reshape((2,2,3))
print(a)
'''
[[[ 0  1  2]
  [ 3  4  5]]
 [[ 6  7  8]
  [ 9 10 11]]]
'''

其中, reshape 函数中的参数 (2,2,3) 可以看作对应的轴:(x,y,z),也就是生成 2x2x3的矩阵
可将其想象到坐标轴中来进行理解:

矩阵中的用中层括号括起来的  [[ 0  1  2]  可看作在 x 轴中,也就是对应 x 轴坐标值为 0
	      			     [ 3  4  5]]
相对的  [[ 6  7  8]  在 x 轴中的坐标值为 1
        [ 9 10 11]]

在 [ 0  1  2]  中,第一行在 y 轴中坐标为 0 ,第二行为 1,第一列在 z 轴中坐标为 0 ,以此类推...
   [ 3  4  5] 

按照这种对应方式,
0 的坐标为 (0,0,0),
3 的坐标为 (0,1,0),
6 的坐标为 (1,0,0),
11的坐标为 (1,1,2)

对该数组使用 transpose 方法,指定进行转换的坐标轴为 x,y 轴:

a = np.arange(12).reshape((2,2,3))
print(a)
'''
[[[ 0  1  2]
  [ 3  4  5]]
 [[ 6  7  8]
  [ 9 10 11]]]
'''
a = np.transpose(a,(1,0,2))
print(a)
'''
[[[ 0  1  2]
  [ 6  7  8]]
 [[ 3  4  5]
  [ 9 10 11]]]
'''

在 transpose 中的参数 (1,0,2) 可看作 (y,x,z) ,也就是 x 对应 0 ,y 对应 1 ,z 对应 2
对于矩阵的变化,就是交换了 x 轴 y 轴
比如原先 3 的坐标为(0,1,0)交换了 x y 之后变成了(1,0,0)也就是原先 6 的位置
对于 0,1,2 ,他们的坐标为 (0,0,*) ,9 ,10 ,11 的坐标为 (1,1, *) ,因此交换了 xy 位置也不变。

再来看复杂一些的变换:

a = np.arange(12).reshape((2,2,3))
print(a)
'''
[[[ 0  1  2]
  [ 3  4  5]]
 [[ 6  7  8]
  [ 9 10 11]]]
'''
a = np.transpose(a,(2,0,1))
print(a)
'''
[[[ 0  3]
  [ 6  9]]
 [[ 1  4]
  [ 7 10]]
 [[ 2  5]
  [ 8 11]]]
'''

上述的变换是 x->y ,y->z,z->x
3 的坐标原先为 (0,1,0) 变换之后 为 (0,0,1) 也就是它现在的位置
6 的坐标原先为 (1,0,0) 变换之后为 (0,1,0)
2 的坐标原先为 (0,0,2) 变换之后为 (2,0,0)
5 的坐标原先为 (0,1,2) 变换之后为 (2,0,1)
11 的坐标原先为 (1,1,2) 变换之后为 (2,1,1)

你可能感兴趣的:(#,numpy)