文章目录
先看一段代码:
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) |
… | … |