|
這個東西的主要作用,就是增加一個維度。
現在我們假設有一個數組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)
複製代碼
那麼,
(1)當axis = 0 時,我們從最高維擴展數組(增加它的維度),就給它在最外面再添個括號就可以啦。所以,
- b = np.expand_dims(a, axis=0)
- b = [[[1, 2, 3], [4, 5, 6]]]
- b.shape = (1, 2, 3)
複製代碼
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)
複製代碼
(3)當axis = 2 時,就是給最裡面的數加一個括號。
- d = np.expand_dims(a, axis=2)
- d = [[[1], [2], [3]], [[4], [5], [6]]]
- d.shape = (2, 3, 1)
複製代碼
參考文章
https://www.zhihu.com/question/265545749 |
|