【Numpy学习记录】np.transpose讲解

    想了很久,决定还是追寻大神之路,开始写写博客,记录一下成长之路

    废话不多说,我们开始讲正题: what is np.transpose?

1、首先看看二维矩阵:

 

import numpy as np


arr = np.arange(30).reshape(5, 6)
print(arr)
tran_arr = np.transpose(arr, axes=None)
print(tran_arr)

        输出结果为:

[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]

 [24 25 26 27 28 29]]

[[ 0  6 12 18 24]
 [ 1  7 13 19 25]
 [ 2  8 14 20 26]
 [ 3  9 15 21 27]
 [ 4 10 16 22 28]
 [ 5 11 17 23 29]]    这个结果意料之中,很好理解,就是线性代数的转置矩阵 

2、再看看多维(三维为例)矩阵

            a.首先,要明确坐标问题

np.arange(12).reshape(2, 2, 3)

(2, 2, 3) 分别代表 d,  h,  w

我们不妨继续看看:

        

arr = np.arange(12).reshape(2, 2, 3)
print(arr[1, 0, 0])

输出结果为:

                6       这下明白了吧,动手实践,多试几个

            b. 接下来还要明白一个索引问题

    

形状 索引
2 0
2 1
3 2

我们看看代码:

 

arr = np.arange(12).reshape(2, 2, 3)
print(arr)
tran_arr = np.transpose(arr, (1, 0, 2))  # (1, 0, 2)即为上面所说的索引号
print(tran_arr)

    输出结果:

 [[[ 0  1  2]
  [ 3  4  5]]

 [[ 6  7  8]
  [ 9 10 11]]]

 

[[[ 0  1  2]
  [ 6  7  8]]

 [[ 3  4  5]
  [ 9 10 11]]]

  这样就实现了转置矩阵,但是对于初学者这个例子恐怕远远不够理解,我们换个例子你就懂啦!

 

arr = np.arange(24).reshape(3, 4, 2)
print(arr)
tran_arr = np.transpose(arr, (1, 0, 2))
print(tran_arr)

输出结果:

        [[[ 0  1]
  [ 2  3]
  [ 4  5]
  [ 6  7]]

 [[ 8  9]
  [10 11]
  [12 13]
  [14 15]]

 [[16 17]
  [18 19]
  [20 21]
  [22 23]]]

 

[[[ 0  1]

  [ 8  9]
  [16 17]]

 [[ 2  3]
  [10 11]
  [18 19]]

 [[ 4  5]
  [12 13]
  [20 21]]

 [[ 6  7]
  [14 15]
  [22 23]]]

            上面的shape 由(3,4,2)变成了(4,3,2),不就是因为索引号由(0,1,2)变成了(1,0,2)吗?

转置就是这么简单!

    

你可能感兴趣的:(Python,Numpy,AI,转置矩阵)