共计 1052 个字符,预计需要花费 3 分钟才能阅读完成。
写在前面
可能你会不相信,我是从玩 pytorch
中过来的,我觉得有必要记录一下,transpose
这个坑还非踩不可, 为了说的清楚一点儿,我多铺垫一点儿
引子
>>> a = np.arange(start=0, stop=24)
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23])
>>> a = a.reshape(4, 3, 2)
>>> # 老铁们猜一猜长啥样
>>> a
array([[[0, 1],
[2, 3],
[4, 5]],
[[6, 7],
[8, 9],
[10, 11]],
[[12, 13],
[14, 15],
[16, 17]],
[[18, 19],
[20, 21],
[22, 23]]])
>>> # 我猜你还没 get 到点
>>> a.shape
(4, 3, 2)
>>> # 我到底想说啥,还是一头雾水,对吧??哈哈
别揍我,关子卖的挺大,我到底想说啥呢??
可能多用来处理图片的缘故,咱们多用二维数组,二维数组 array.shape
返回的元组,[0]
是有几行的意思 (也就是数组所谓的 宽),[1]
是有几列的意思 (也就是数组所谓的 长)
而上面引例中,你可以把它理解为 四通道的图片 , 而每一通道可以单独视作一张灰度图, 这样说应该没问题吧?(希望大家能理解),所以按照咱们之前在二维图片的理解,a.shape
返回的元组应该有 [0]
是图片的宽 (有几行),[1]
是图片的长 (有几列),[2]
是图片的通道数
所以 a.shape
应该为:(3, 2, 4)
即 三行两列四通道
然而实际上,a.shape
返回的元组是 (4, 3, 2)
,该怎么理解呢??
我这里提出一种解释(只方便理解,也不知道对不对哈)
咱们初次看三维数组
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]]
而你看到的 4 个二维数组所在的维度就是 三维数组 中所谓的 第一维 即
shape[0]
取这 4 个二维数组中的 第一个
把它的皮剥掉
[0, 1],
[2, 3],
[4, 5]
没错,我想说的就是,这 3 个一维数组所在的维度就是 三维数组 中所谓的 第二维 即
shape[1]
咱有始有终,取这 3 个一维数组中的 第一个
把它的皮剥掉,
0,1
只剩下 两个常数 ,嗯嗯,这 俩常数 就是 三维数组 中所谓的 第三维 即
shape[2]
总结一下就是, 看见高维度数组,不要慌,从外向里 依次 ” 剥皮 ”,就分别是数组的第 1,2,3…… 维度