之前對numpy函數中axis參數所指向的數據一直無法完全理解,但是接觸過跨度的概念之後,對axis參數所指向的數據纔有所理解。
以numpy.sum函數爲例,初始化一個維度爲2*3*4維的全一矩陣,代碼如下:
arr = np.ones((2, 3, 4))
結果如下:
array([[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]],
[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]])
所謂沿着某個軸計算就是將這個軸上的所有元素進行相應計算,以numpy sum函數爲例,對於axis=0的情況,就是將0軸上的元素依次相加,其他軸的元素維度保持不變,在上例中0軸上共有兩個元素,分別爲arr[0], arr[1],數據如下:
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
對這兩個元素相加,結果如下:
>>> arr[0] + arr[1]
array([[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]])
接下來用sum函數對結果進行驗證。
>>> np.sum(arr, axis=0)
array([[2., 2., 2., 2.],
[2., 2., 2., 2.],
[2., 2., 2., 2.]])
結果完全相同。
利用同樣的方法對axis=1進行驗證,沿着1軸進行計算,實際進行的是0軸保持維度不變,1軸的對應元素進行計算。以上例就是arr[0][0] + arr[0][1] + arr[0][2], arr[1][0] + arr[1][1] + arr[1][2]兩個結果。
還是先用具體元素進行驗證:
>>> arr[0][0] + arr[0][1] + arr[0][2]
array([3., 3., 3., 3.])
>>> arr[1][0] + arr[1][1] + arr[1][2]
array([3., 3., 3., 3.])
再用sum進行驗證
>>> np.sum(arr, axis=1)
array([[3., 3., 3., 3.],
[3., 3., 3., 3.]])
結果還是完全相同,對於axis=2一樣可以得到相同的結果。
總結:numpy函數的axis不能簡單的理解爲軸0是行,軸1是列。而應該理解爲沿着某個軸,就是對對應維度的元素進行計算,其他維度的元素保持不變。