woff 發表於 2023-7-26 22:48:57

numy中np.expand_dims方法的理解?

這個東西的主要作用,就是增加一個維度。

現在我們假設有一個數組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對應1,A對應2,A對應3,A對應4……

如果設置axis為0,這時候矩陣從XOY平面移動到了YOZ平面,X軸只有一個值

那麼,變換後的矩陣A'的第一個維度,只有一個值,就只能是0

A'是1,A是2,A是3

A'是4,A是5,A是6

A'不指定第三維,那麼就是

A'不指定第三維,就是

那A……呢?不好意思,沒有,因為第一維只能取一個數,就是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()
print(a.shape)
# a.shape(3,)
那麼,

(1)當axis = 0 時,我們從最高維擴展數組(增加它的維度),就給它在最外面再添個括號就可以啦。所以,

b = np.expand_dims(a, axis=0)
b = []
b.shape = (1, 3)
shape(1,3)表示從左至右(從高維到低維:axis = 0 , 1)所包含內容的情況,axis = 0(最外面的括號)只包含一個內容:; axis = 1(第二個括號)裡包含三個內容:1, 2,3。

(2)當axis = 1 時, 只有第0維有括號,所以當axis = 1就是給裡面的數加括號啦

c = np.expand_dims(a, axis=1)
c = [, , ]
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([, ])
print(a.shape)
# a.shape(2, 3)
那麼,

(1)當axis = 0 時,我們從最高維擴展數組(增加它的維度),就給它在最外面再添個括號就可以啦。所以,

b = np.expand_dims(a, axis=0)
b = [[, ]]
b.shape = (1, 2, 3)
shape(1, 2, 3)表示從左至右(從高維到低維:axis = 0 , 1, 2)所包含內容的情況,axis = 0(最外面的括號)只包含1個內容:[, ]; axis = 1(第二個括號)裡包含2個內容:, 。axis = 3(第三個括號)裡包含3個內容:1, 2, 3;或4,5, 6

(2)當axis = 1 時,就是給第二個括號再加一個括號啦

c = np.expand_dims(a, axis=1)
c = [[], []]
c.shape = (2, 1, 3)
(3)當axis = 2 時,就是給最裡面的數加一個括號。

d = np.expand_dims(a, axis=2)
d = [[, , ], [, , ]]
d.shape = (2, 3, 1)

參考文章
https://www.zhihu.com/question/265545749
頁: [1]
查看完整版本: numy中np.expand_dims方法的理解?