函數原型為:stack(arrays,axis=0),arrays可以傳數組和列表。axis的含義我下面會講解,我們先來看個例子,然后我會分析輸出結果。
import numpy as npa=[[1,2,3], [4,5,6]]print("列表a如下:")print(a)print("增加一維,新維度的下標為0")c=np.stack(a,axis=0)print(c)print("增加一維,新維度的下標為1")c=np.stack(a,axis=1)print(c)輸出:列表a如下:[[1, 2, 3], [4, 5, 6]]增加一維,新維度下標為0[[1 2 3] [4 5 6]]增加一維,新維度下標為1[[1 4] [2 5] [3 6]]首先這里arrays我傳的是一個列表,現在我開始講解這個stack()函數的意思,它就是對arrays里面的每個元素(可能是個列表,元組,或者是個numpy的數組)變成numpy的數組后,再對每個元素增加一維(至于維度加在哪里,是靠axis控制的),然后再把這些元素串起來(至于怎么串,我下面會說)。
arrays里面的每個元素必須形狀是一樣的,例如本例中列表a中的兩個元素[1,2,3]和[4,5,6]的形狀是一樣的,如果把[4,5,6]換成[4,5] ,那么程序會報錯!而axis代表的是在哪個維度上加一維,例如axis=0(它是默認的)代表的就是增加的這一維的下標為0,axis等于多少不是隨便亂寫的,如果參數arrays里面的每個元素是個1維的,那么調用stack()函數增加一維后會變成2維的,所以axis只能等于0和1(維度的下標是從0開始的),而參數axis=0和axis=1得到的結果是不一樣的。
例如上面的代碼中a列表中的第一個元素為[1,2,3],那么當axis=0的時候,就是在它的中括號外面再加一個中括號,變成[ [1,2,3] ](其實1,2,3之間是沒有逗號的,因為stack()函數會先把參數arrays中的每個元素變成numpy的數組,數組之間是沒有逗號的,看看上面的代碼輸出就知道了,這里大家明白就行,我為了方便講解,下面還會加上逗號),這樣最外面那層中括號才代表維度下標為0的那維;當axis=1的時候,就是在里面加個中括號,變成了[ [1],[2],[3] ],這樣里面加的那層中括號才代表維度下標為1的那維。同理當axis=0的時候[4,5,6]變成[ [ 4,5,6] ],當axis=1的時候,變成[ [4],[5],[6] ]。下面我們講如何把增加一維度后的每個元素串起來。
怎么把上面那兩個元素增加維度后的結果串起來呢,其實很簡單。現在我們已經知道了增加維度無非是增加中括號的意思,至于在哪里加中括號,取決于axis等于幾。我們把增加的中括號想像成一個個的箱子。還拿上面的代碼來說,當axis=0的時候,我們把套在[1,2,3]外面的中括號(就是[ [1,2,3] ]最外層的那個中括號)看做是箱子A,這個箱子A也會套在[4,5,6]的外面,所以我們就先把[1,2,3]和[4,5,6]放在一起,變成[1,2,3],[4,5,6],然后再一起套上箱子A,變成[ [1,2,3],[4,5,6] ]這就是當axis=0的時候程序的輸出結果。
新聞熱點
疑難解答