Numpy 中的 axis
阿新 • • 發佈:2019-12-31
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 1
、axis 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。