1. 程式人生 > >python 中 np.sum()函式 通俗易懂理解!

python 中 np.sum()函式 通俗易懂理解!

這一篇部落格保證是我寫的最清楚,最容易理解的部落格!!

     眾所周知,sum不傳參的時候,是所有元素的總和。這裡就不說了。

1 sum函式可以傳入一個axis的引數,這個引數怎麼理解呢?這樣理解:

假設我生成一個numpy陣列a,如下

>>> import numpy as np
>>> a = np.array([[[1,2,3,2],[1,2,3,1],[2,3,4,1]],[[1,0,2,0],[2,1,2,0],[2,1,1,1]]])
>>> a
array([[[1, 2, 3, 2],
        [1, 2, 3, 1],
        [2, 3, 4, 1]],

       [[1, 0, 2, 0],
        [2, 1, 2, 0],
        [2, 1, 1, 1]]])
>>> 

這是一個擁有兩維的陣列,每一維又擁有三個陣列,這個數組裡面擁有四個元素。如果我們要將這個a陣列中的第一個元素1定位出來,則我們會輸入a[0][0][0]。好,這個axis的取值就是這個精確定位某個元素需要經過多少陣列的長度,在這裡是3,,所以axis的取值有0,1,2。如果一個數組精確到某個元素需要a[n0][n1][n2][...][n],則axis的取值就是n。定位 到這裡,axis的引數的取值就解釋完成了。

2 理解引數axis取值對sum結果的影響:

前面說了axis的取值(以陣列a為例),axis=0,1,2。在這裡,精確定位到某個元素可以用a[n0][n1][n2]表示。n0的取值是0,1(陣列兩維),代表第一個索引;n1的取值是0,1,2(每一維陣列擁有3個子陣列),代表第二個索引;n2的取值是0,1,2,3(每個子陣列有4個元素),代表第三個索引,這幾個取值在後面會用到。

  2.1 axis = 0的時候:

     axis=0,對應n0已經確定下來,即n0取值定為0,1。所以sum每個元素的求和公式是sum = a[0][n1][n2]+a[1][n1][n2]。接下來確定sum的行數和列數,n1的取值是0,1,2,為3個數,代表行數,n2的取值是0,1,2,3,為4個數,代表列數,所以sum為3*4的陣列。

如何求sum的各個元素呢,sum = a[0][n1][n2]+a[1][n1][n2]這個公式又如何理解呢?如下。我們可以做一個表格:注意顏色

                    n2=0                n2=1                 n2=2
                  n2=3
n1=0  a[0][0][0]+a[1][0][0]=1+1=2  a[0][0][1]+a[1][0][1]=2+0=2  a[0][0][2]+a[1][0][2]=3+2=5  a[0][0][3]+a[1][0][3]=2+0=2
n1=1  a[0][1][0]+a[1][1][0]=1+2=3  a[0][1][1]+a[1][1][1]=2+1=3  a[0][1][2]+a[1][1][2]=3+2=5  a[0][1][3]+a[1][1][3]=1+0=1
n1=2  a[0][2][0]+a[1][2][0]=2+2=4  a[0][2][1]+a[1][2][1]=3+1=4  a[0][2][2]+a[1][2][2]=4+1=5  a[0][2][3]+a[1][2][3]=1+1=2
所以sum(axis=0)的值是 [ [2, 2, 5, 2], [3, 3, 5, 1], [4, 4, 5, 2]]。

     驗證一下, 正確!

>>> a.sum(axis=0)
array([[2, 2, 5, 2],
       [3, 3, 5, 1],
       [4, 4, 5, 2]])

        2.2 axis = 1的時候:

     axis=1,對應n1已經確定下來,即n1取值定為0,1,2。所以sum每個元素的求和公式是sum =a[n0][0][n2]+a[n0][1][n2]+a[n0][2][n2]。接下來確定sum的行數和列數,n0的取值是0,1,為2個數,代表行數,n2的取值是0,1,2,3,為4個數,代表列數,所以sum為2*4的陣列。

如何求sum的各個元素呢,sum = a[n0][0][n2]+a[n0][1][n2]+a[n0][2][n2]這個公式又如何理解呢?我們又做一個表格,顏色不標註了

n2=0 n2=1 n2=2 n2=3
n0=0 a[0][0][0]+
a[0][1][0]+
a[0][2][0]
= 1+1+2=4
a[0][0][1]+
a[0][1][1]+
a[0][2][1]
=2+2+3=7
a[0][0][2]+
a[0][1][2]+
a[0][2][2]
=3+3+4=10
a[0][0][3]+
a[0][1][3]+
a[0][2][3]
=2+1+1=4
n0=1 a[1][0][0]+
a[1][1][0]+
a[1][2][0]
=1+2+2=5
a[1][0][1]+
a[1][1][1]+
a[1][2][1]
=0+1+1=2
a[0][0][2]+
a[0][1][2]+
a[0][2][2]
=2+2+1=5
a[1][0][3]+
a[1][1][3]+
a[1][2][3]
=0+0+1=1
所以sum(axis=1)的值是 [ [4, 7, 10, 4], [5, 2, 5, 1]]. 驗證如下,正確。
>>> a.sum(axis=1)
array([[ 4,  7, 10,  4],
       [ 5,  2,  5,  1]])

        2.3 axis = 2的時候:

     axis=2,對應n2已經確定下來,即n2取值定為0,1,2, 3。所以sum每個元素的求和公式是sum =a[n0][n1][0]+a[n0][n1][1]+a[n0][n1][2]+a[n0][n1][3]。接下來確定sum的行數和列數,n0的取值是0,1,為2個數,代表行數,n1的取值是0,1,2,為3個數,代表列數,所以sum為2*3的陣列。

如何求sum的各個元素呢,sum = a[n0][n1][0]+a[n0][n1][1]+a[n0][n1][2]+a[n0][n1][3]這個公式又如何理解呢?我們又做一個表格,顏色不標註了

n1=0 n1=1 n1=2
n0=0 a[0][0][0]+
a[0][0][1]+
a[0][0][2]+
a[0][0][3]
=1+2+3+2=8
a[0][1][0]+
a[0][1][1]+
a[0][1][2]+
a[0][1][3]
=1+2+3+1=7
a[0][2][0]+
a[0][2][1]+
a[0][2][2]+
a[0][2][3]
=2+3+4+1=10
n0=1 a[1][0][0]+
a[1][0][1]+
a[1][0][2]+
a[1][0][3]
=1+0+2+0=3
a[1][1][0]+
a[1][1][1]+
a[1][1][2]+
a[1][1][3]
=2+1+2+0=5
a[1][2][0]+
a[1][2][1]+
a[1][2][2]+
a[1][2][3]
=2+1+1+1=5
所以sum(axis=2)的值是 [ [8, 7, 10], [3, 5, 5]]. 驗證如下,正確。
>>> a.sum(axis=2)
array([[ 8,  7, 10],
       [ 3,  5,  5]])
 好了,sum的函式解釋結束。