關於numy中np.expand_dims方法的理解?
看了numpy手冊中的expand_dims方法,但是還是沒明白是怎麼回事,請用直觀簡單的方法闡述一下該方法究竟是什麼意思?尤其是axis=0,1,2的時候,數組是怎麼變化的。能給個圖示意一下更好。感覺reshape也可以達到相同效果。不知道我的理解對不對。謝謝。
這個東西的主要作用,就是增加一個維度。
現在我們假設有一個數組A,數組A是一個兩行三列的矩陣。大小我們記成(2,3)。
先明白一個常識,計算機中計數,一般是從0開始的。
所以(2,3)這個兩行三列的矩陣,
它的第「0」維,就是這個「2」行;第「1」維,就是這個「3」列。
這個函數的作用,就是在第「axis」維,加一個維度出來,原先的「維」,推到右邊去。
比如我們設置axis為0,那A矩陣的大小就變成了(1,2,3),就從2*3的二維矩陣變成了一個1*2 *3的三維矩陣。如果設置axis為1,矩陣大小就變成了(2,1,3),變成了一個2*1*3的三維矩陣。axis為2的時候,就變成(2,3,1)啦。
那麼,說了這麼多,矩陣的形式變了,那麼矩陣裡面的數字怎麼變的呢?
舉個例子:
假設現在矩陣是2*3的矩陣,六個數字
1 2 3
4 5 6
初中和高中所學的平面直角坐標系和空間直角坐標系還記得嗎?
我們設置axis為0,矩陣從2*3的二維矩陣變成了1*2*3的三維矩陣。
我們假設原來是一個二維平面,橫坐標為x,縱坐標為y, 2*3的矩陣在這個XOY平面上。此時就是一個二維矩陣,(根本就沒有z軸)
而變換以後,現在變成了三維矩陣,變成了一個空間直角坐標系,,有x,y,z三個軸。
原先的2*3的矩陣從XOY平面移動到了YOZ平面
(我們把原先的矩陣當成一個平攤在桌面上的紙片,變換以後,相當於給它立起來了),然後原先的X軸的「厚度」為1,此時雖然形式還是原來的數字,但是多了一個軸。
那如果設置axis為1呢?
就是從XOY面的矩陣,給它立起來到XOZ平面,在Y軸的厚度為1。
設置axis為2,就是從XOY面的矩陣,還是放在XOY面上。但是這時候多了一個z軸,(相當於這個操作之後可以在桌面的紙片上面,疊加新的紙片了)
——————————————————————————————————
這時候我們再看矩陣
1 2 3
4 5 6
原先A[0][0]對應1,A[0][1]對應2,A[0][2]對應3,A[1][0]對應4……
如果設置axis為0,這時候矩陣從XOY平面移動到了YOZ平面,X軸只有一個值
那麼,變換後的矩陣A的第一個維度,只有一個值,就只能是0
A[0][0][0]是1,A[0][0][1]是2,A[0][0][2]是3
A[0][1][0]是4,A[0][1][1]是5,A[0][1][2]是6
A[0][0]不指定第三維,那麼就是[1,2,3]
A[0][1]不指定第三維,就是[4,5,6]
那A[1][0][0]……呢?不好意思,沒有,因為第一維只能取一個數,就是0。
axis為1,2都同理。
可能說的有點啰嗦了。
如果是三維矩陣變成四維矩陣,那就不好直接想像樣子了。但是道理是一樣的。
&>&>&> x.shape
(2, 2)
&>&>&> np.expand_dims(x,axis=0).shape
(1, 2, 2)
&>&>&> np.expand_dims(x,axis=-1).shape
(2, 2, 1)
&>&>&>
推薦閱讀:
※數組數據類型轉換及算術運算
※ImagePy教程 —— 直方圖調整
※《利用python進行數據分析》第五章 pandas的數據結構筆記
※《Python for Data Analysis》書中Pythonic寫法
※python numpy的樣本標準差怎麼寫?
TAG:numpy |
