| 
 | 
 
 
這個東西的主要作用,就是增加一個維度。 
 
現在我們假設有一個數組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都同理。 
 
函數格式如下: 
 
- np.expand_dims(array, axis)
 
  複製代碼 
 
首先,我們需要理解axis(https:// blog.csdn.net/qq_358603 52/article/details/80463111)的意義,當axis=0時,我們從最外面的括號開始看,axis=0是最高維度,axis=1就是從左至右第二個括號所包含的內容,以此類推。 
 
從例子理解: 
 
1.我們先來看一維數組, axis = 0, 1, 2的情況 
 
- import numpy as np
 
 - a = np.array([1, 2, 3])
 
 - print(a.shape)
 
 - # a.shape(3,)
 
  複製代碼 
那麼, 
 
(1)當axis = 0 時,我們從最高維擴展數組(增加它的維度),就給它在最外面再添個括號就可以啦。所以, 
 
- b = np.expand_dims(a, axis=0) 
 
 - b = [[1, 2, 3]]
 
 - b.shape = (1, 3)
 
  複製代碼 
shape(1,3)表示從左至右(從高維到低維:axis = 0 , 1)所包含內容的情況,axis = 0(最外面的括號)只包含一個內容:[1, 2, 3]; axis = 1(第二個括號)裡包含三個內容:1, 2,3。 
 
(2)當axis = 1 時, 只有第0維有括號,所以當axis = 1就是給裡面的數加括號啦 
 
- c = np.expand_dims(a, axis=1) 
 
 - c = [[1], [2], [3]]
 
 - c.shape = (3, 1)
 
  複製代碼 
(3)當axis = 2時,我們可以發現,我們沒有地方加括號,所以它還是和axis=1的情況一樣。並且程序會提示:(以後會報錯) 
 
DeprecationWarning: Both axis > a.ndim and axis < -a.ndim - 1 are deprecated and will raise an AxisError in the future. 
———————————————————— 
 
2.我們再來看二維數組, axis = 0, 1, 2的情況 
 
- import numpy as np
 
 - a = np.array([[1, 2, 3], [4, 5, 6]])
 
 - print(a.shape)
 
 - # a.shape(2, 3)
 
  複製代碼 
numy expand_dims 方法理解 
 
 
那麼, 
 
(1)當axis = 0 時,我們從最高維擴展數組(增加它的維度),就給它在最外面再添個括號就可以啦。所以, 
 
- b = np.expand_dims(a, axis=0) 
 
 - b = [[[1, 2, 3], [4, 5, 6]]]
 
 - b.shape = (1, 2, 3)
 
  複製代碼 
numy expand_dims 方法理解 
 
 
shape(1, 2, 3)表示從左至右(從高維到低維:axis = 0 , 1, 2)所包含內容的情況,axis = 0(最外面的括號)只包含1個內容:[[1, 2, 3], [4, 5, 6]]; axis = 1(第二個括號)裡包含2個內容:[1, 2, 3], [4, 5, 6]。axis = 3(第三個括號)裡包含3個內容:1, 2, 3;或4,5, 6 
 
(2)當axis = 1 時,就是給第二個括號再加一個括號啦 
 
- c = np.expand_dims(a, axis=1) 
 
 - c = [[[1, 2, 3]], [[4, 5, 6]]]
 
 - c.shape = (2, 1, 3)
 
  複製代碼 
numy expand_dims 方法理解 
 
 
(3)當axis = 2 時,就是給最裡面的數加一個括號。 
 
- d = np.expand_dims(a, axis=2) 
 
 - d = [[[1], [2], [3]], [[4], [5], [6]]]
 
 - d.shape = (2, 3, 1)
 
  複製代碼 
numy expand_dims 方法理解 
 
 
 
參考文章 
https://www.zhihu.com/question/265545749 |   
 
 
 
 |