對Numpy數組按axis運算的理解

Python的Numpy數組運算中,有時會出現按axis進行運算的狀況,如數組

>>> x = np.array([[1, 1], [2, 2]])
>>> x
array([[1, 1], [2, 2]])
>>> x.sum(axis=0)%x.sum(axis=1)

本身初學時,容易搞混axis=0到底表明的是按行運算仍是按列運算,並且這僅是針對二維數組狀況,更高維數組就沒法僅僅用行列來區分了。
通過本身的研究和實踐後,談一下本身的理解,讀者若有不贊同的地方,歡迎交流探討。markdown


numpy數組按axis 運算時,參數axis 表明的是數組的維數序號,如x.sum(axis=0) 表明按第一維(對於二維數組即按列)求和,x.sum(axis=1 表明按第二維(對於二維數組即按行)求和。
這裏的第一維、第二維如何去理解?個人理解是看numpy數組中[] 的嵌套關係。第一維就是最外層的[] ,第二維則是次外層的[],高於二維情形依次類推。下面用實際代碼說明。lua

%二維情形
>>> x = np.array([[1, 1], [2, 2]])
>>> x
array([[1, 1], [2, 2]])
>>> x.sum(axis=0)   # columns (first dimension)
array([3, 3])
>>> x[:, 0].sum(), x[:, 1].sum()
(3, 3)
>>> x.sum(axis=1)   # rows (second dimension)
array([2, 4])
>>> x[0, :].sum(), x[1, :].sum()
(2, 4)
%三維情形
>>> x=np.arange(1,9).reshape(2,2,2);x
array([[[1, 2], [3, 4]],
       [[5, 6], [7, 8]]])
>>> x.sum(axis=0) %按第一維求和,把最外層'[]'裏面的元素(二維數組)求和
array([[ 6, 8], [10, 12]])
>>> x.sum(axis=1) %按第二維求和,把次外層'[]'裏面的元素(一維數組)求和
array([[ 4, 6], [12, 14]])
>>> x.sum(axis=2) %按第三維求和,把第三層'[]'裏面的元素求和
array([[ 3, 7], [11, 15]])
>>> x.sum(axis=2)[0,1] %上面矩陣中第一行第二個元素
7
相關文章
相關標籤/搜索