有关numpy里的transpose()的理解

4 篇文章 0 订阅

文章目录


先看一段代码:

import numpy as np


a = np.array(range(30)).reshape(2, 3, 5)
print(a)
# [[[ 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]]]

b = a.transpose(1,0,2)
print("-------------------下面是b-----------------")
print(b)
# [[[ 0  1  2  3  4]
#   [15 16 17 18 19]]
#
#  [[ 5  6  7  8  9]
#   [20 21 22 23 24]]
#
#  [[10 11 12 13 14]
#   [25 26 27 28 29]]]
c = a.transpose()
print("------------------下面是c-------------------")
print(c)
# [[[ 0 15]
#   [ 5 20]
#   [10 25]]
#
#  [[ 1 16]
#   [ 6 21]
#   [11 26]]
#
#  [[ 2 17]
#   [ 7 22]
#   [12 27]]
#
#  [[ 3 18]
#   [ 8 23]
#   [13 28]]
#
#  [[ 4 19]
#   [ 9 24]
#   [14 29]]]


先看下面这个:

[[[ 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轴, 第二个方括号指的是第1轴,第三个方括号指的是第2轴;
一维数组里面包含两个元素:

[[ 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]]

每个元素是一个包含3个元素的数组,以第一个为例下面这三个是三个数组:

[ 0  1  2  3  4]; [ 5  6  7  8  9];[10 11 12 13 14]

这三个元素又是一个包含5个元素的数组,如上所示;
数组a的shape为(2,3,5);是一个三维数组,那么这个元组所对应的索引为:(0,1,2),也就是a.shape的下标:(2[0],3[1],5[2]),[]中对应的是shape元组的索引,那么现在通过b=a.transpose(1,0,2),那么b.shape就变成了(3,2,5),这就是说transpose的作用就是改变高维数组的形状;
元素11在a中的位置是a[0][2][1],注意这里的a[0]指的是:

[[ 0  1  2  3  4]
  [ 5  6  7  8  9]
  [10 11 12 13 14]]

a[0][2]指的是[10 11 12 13 14]; (a[0][0]指的是[0 1 2 3 4])
a[0][2][1]指的是11,a[0][2][0]指的是10;
上面说到11在a里面的位置是a[0][2][1];经过b = a.transpose(1,0,2)之后,11的位置就变成了b[2][0][1];

[[[ 0  1  2  3  4]
  [15 16 17 18 19]]

 [[ 5  6  7  8  9]
  [20 21 22 23 24]]

 [[10 11 12 13 14]
  [25 26 27 28 29]]]

上面数组里面b[0]为:

[[ 0  1  2  3  4]
  [15 16 17 18 19]]

b[1]为:

 [[ 5  6  7  8  9]
  [20 21 22 23 24]]

b[2]为:

 [[10 11 12 13 14]
  [25 26 27 28 29]]

b[2][0]为:

[10 11 12 13 14]

b[2][0][1]为:11;

小结

11在a里面的位置是a[0][2][1];经过b = a.transpose(1,0,2)之后,11的位置就变成了b[2][0][1];
28,在a中的位置a[1][2][3],在b中为:b[2][1][3].
transpose默认指的是将原来的坐标系(0,1,2)变成(2,1,0);
如果原来的形状是(2,3,5), 则经过transpose()之后,变为了(5,3,2)

变换前变换后
变换前坐标系:(0,1,2)变换后坐标系:(1,0,2)
11为a[0][2][1]11为b[2][0][1]
28为a[1][2][3]28为b[2][1][3]
变换前形状为(2,3,5)变换后形状为(3,2,5)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值