標籤:

關於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 |