首先: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]這個公式又如何理解呢?如下。我們可以做一個表格:注意顏色
所以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]這個公式又如何理解呢?我們又做一個表格,顏色不標注了
所以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]這個公式又如何理解呢?我們又做一個表格,顏色不標注了
所以sum(axis=2)的值是 [ [8, 7, 10], [3, 5, 5]]. 驗證如下,正確。
>>> a.sum(axis=2) array([[ 8, 7, 10], [ 3, 5, 5]])
————————————————
版權聲明:本文為CSDN博主「rifengxxc」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/rifengxxc/article/details/75008427