可能你會不相信,我是從玩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