numpy數組維度理解終結版

寫在前面

可能你會不相信,我是從玩pytorch中過來的,我以爲有必要記錄一下,transpose這個坑還非踩不可,爲了說的清楚一點兒,我多鋪墊一點兒,先說說numpy數組維度的理解segmentfault

引子

>>> 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函數code

相關文章
相關標籤/搜索