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