1. 程式人生 > 程式設計 >Numpy 中的 axis

Numpy 中的 axis

Numpy 中的 axis 對初學者而言是一個非常容易引起困擾的概念,本文希望通過圖文並茂的方式,讓大家能對 axis 有一個直觀的認識。

數形結合百般好

數缺形時少直觀,形少數時難入微。
數形結合百般好,隔離分家萬事休。
—— 華羅庚

axis 本身就是 的意思,它實際上代表了要在哪個軸上進行求和,所以使用 sum 函式時,一定要有一個空間上的概念,這樣會非常容易理解計算的結果。

二維

所以當我們說 [[0,4,2],[-2,5,3]],我們說的其實是:

二維陣列對應的就是一個二維表格,它一共有兩個軸(axis),axis 0 對應行,axis 1 對應列。

當指定 axis 0 進行求和時,做的是這樣的運算:

也就是順著 axis 0 軸求和,最後得到一個一維陣列:

>>> np.sum([[0,4,2],[-2,5,3]],axis=0)
array([-2,9,5])
複製程式碼

同樣地,當指定 axis 1 時,是這樣的:

即:

>>> np.sum([[0,axis=1)
array([6,6])
複製程式碼

三維

上升到三維空間又是怎樣的呢?實際上道理還是一樣的,我們建立一個三維陣列:

>>> array_3d = [
...     [
...             [1,...             [3,4]
...     ],... 
[ ... [5,6],... [7,8] ... ],... [ ... [9,10],... [11,12] ... ] ... ] 複製程式碼

然後腦海裡馬上就有一個三維的空間了!

那對 axis 0 求和,其實就是順著 axis 0 的方向求和,最後得出的是一個二維陣列:

即:

>>> np.sum(array_3d,axis=0)
array([[15,18],[21,24]])
複製程式碼

axis 1axis 2 也是一樣的,這裡以 axis 2 舉例,大家可以嘗試自己畫 axis 1 的:

>>> np.sum(array_3d,axis=2)
array([[ 3,7],[11,15],[19,23]])
複製程式碼

四維咋辦

四維咋辦,四維還真不好畫,不過本文的目的是能夠直觀理解計算的結果,講道理前面這些圖應該足夠理解求和了,所以我也不畫了,哈哈哈

軸的確定

當然,上面所有運算的前提,都是我們正確確定好了座標軸的方向。關鍵問題在於,如何知道哪個是 axis 0、哪個是 axis 1

實際上,軸的確定可以根據巢狀關係來確定,軸的順序就是括號的從外到內:

不過用這種方式思考,就少了對形的理解,會稍微難以理解,可以參考 Python · numpy · axis

參考