numpy之統計函數和布爾數組方法


統計函數

可以通過numpy的統計函數對整個數組或者某個軸向的數據進項統計計算。

所謂的軸向,其實就是n維向量的某一維。或者說某一行,某一列。

sum對數組(向量)中全部或某個軸向的元素求和,長度為0,則sum為0.
mean算數平均數,作用范圍同sum,長度為0,結果為NaN。


In [1]: import numpy as np

In [2]: x = np.arange(9).reshape(3,3)#二維

In [3]: x
Out[3]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [4]: x.sum()
Out[4]: 36

In [5]: np.sum(x[0])
Out[5]: 3

In [6]: np.sum(x[:,0])
Out[6]: 9

In [7]: x.mean()
Out[7]: 4.0

In [8]: np.mean(x[0])
Out[8]: 1.0

In [9]: np.mean(x[:,1])
Out[9]: 4.0

In [10]: y = np.arange(18).reshape(2,3,3)#三維                         
                                                                
In [11]: y                                                        
Out[11]:                                                          
array([[[ 0,  1,  2],                                             
        [ 3,  4,  5],                                             
        [ 6,  7,  8]],                                            
                                                                  
       [[ 9, 10, 11],                                             
        [12, 13, 14],                                             
        [15, 16, 17]]])                                           
                                                                  
In [12]: np.sum(y)                                                
Out[12]: 153                                                      
                                                                  
In [13]: np.mean(y)                                               
Out[13]: 8.5                                                      
                                                                  
In [14]: np.sum(y[0])                                             
Out[14]: 36                                                       
                                                                  
In [15]: np.sum(y[:,0])                                           
Out[15]: 33                                                       
                                                                  

可以發現,sum,mean不但能作為數組的實例方法調用,還可以作為Numpy函數調用。

另外,numpymean,sum函數還可以接受一個axis參數,用於計算該軸向的參數值,咳咳,敲黑板,重點來了,什么軸向?


In [21]: x  #2維
Out[21]:
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])

In [22]: x.sum(axis=0)
Out[22]: array([ 9, 12, 15])

In [23]: x.sum(axis=1)
Out[23]: array([ 3, 12, 21])
In [24]: y  #3維                              
Out[24]:                                
array([[[ 0,  1,  2],                   
        [ 3,  4,  5],                   
        [ 6,  7,  8]],                  
                                        
       [[ 9, 10, 11],                   
        [12, 13, 14],                   
        [15, 16, 17]]])                 
                                        
In [25]: y.sum(axis=0)                  
Out[25]:                                
array([[ 9, 11, 13],                    
       [15, 17, 19],                    
       [21, 23, 25]])                   
                                        
In [26]: y.sum(axis=1)                  
Out[26]:                                
array([[ 9, 12, 15],                    
       [36, 39, 42]])                   
                                        
In [27]: y.sum(axis=2)                  
Out[27]:                                
array([[ 3, 12, 21],                    
       [30, 39, 48]])                   
                                        
In [28]: y.sum(axis=3) 
ValueError: 'axis' entry is out of bounds    

經過試驗,可以發現,

沒有axis參數表示全部相加,axis=0表示按列相加,axis=1表示按照行的方向相加。 axis = 2,也是行相加,不過代表的是2維程度的相加。

另外,輸入axis = 3,返回了錯誤,這說明,axis參數的維度總是比數組低一層。

另外,axis還可以接受一個元組。

In [30]: x.sum(axis=(0,1))
Out[30]: 36

In [30]: x.sum(axis=(0,1))
Out[30]: 36

In [31]: y.sum(axis=(0,1))
Out[31]: array([45, 51, 57])

In [32]: y.sum(axis=(0,1,2))
Out[32]: 153

In [33]: y.sum(axis=(1,2,0))
Out[33]: 153

可以發現,輸入元組,實現了行和列的先后相加,拿x來說,

axis=(0,1)代表了先進行列相加,再將列相加的結果進行行相加

所以最后的結果和全部求和的結果是一致的。

而且,結果與其順序是沒有關系的。

std、var 分別為標准差和方差,自由度是可以進行調整的(默認為n)
min、max 最小值最大值
argmin、argmax 最小值,最大值索引
cumsum 所有元素的累計和
cumprod 所有元素的累計積

以上這些函數,也可以接受參數axis,並且用法和上方的mean,sum基本一致。

但是argmin、argmax、cumsum、cumprod不接受元組。

自由度這一點有待進一步確定。

結合布爾型數組

以上這些方法還可以結合布爾型數組來使用。因為,在這些方法中,布爾值會被強制轉換為0和1。

因此,sum可以對向量中的True值進行計數。如:


In [39]: k = np.random.randn(50)

In [40]: np.sum(k > 0)
Out[40]: 27

除此外,對於布爾型數組,還有兩個特別有用的方法:any,all

any用於測試數組(向量)中是否存在True。
all用於確定數組中是否全是True。


In [41]: arr = np.random.randn(10)

In [42]: arr
Out[42]:
array([-0.77695399, -1.04211228,  0.85516427, -0.04749936, -1.32314252,
       -0.59968117,  1.93582735,  0.08567928, -1.10820476,  1.2410364 ])

In [43]: arr1 = arr>0

In [44]: arr1
Out[44]: array([False, False,  True, False, False, False,  True,  True, False,  True], dtype=bool)

In [45]: arr1.any()
Out[45]: True

In [46]: arr1.all()
Out[46]: False


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM