写在前面
可能你会不相信,我是从玩pytorch
中过来的,我觉得有必要记录一下,transpose
这个坑还非踩不可,为了说的清楚一点儿,我多铺垫一点儿,先说说numpy
数组维度的理解
引子
>>> 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......维度
下一篇博客写transpose
函数
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。