對numpy axis(軸)的理解

之前對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是列。而應該理解爲沿着某個軸,就是對對應維度的元素進行計算,其他維度的元素保持不變。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章