numpy数组维度理解终结版-以及-简单瞅瞅-numpy库transpose函数

31次阅读

共计 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…… 维度

正文完
 0