17、Numpy 統計函數

1、番外說明

大家好,我是小P,本系列是本人對Python模塊Numpy的一些學習記錄,總結於此一方面方便其它初學者學習,另一方面害怕自己遺忘,希望大家喜歡。此外,對“目標檢測/模型壓縮/語義分割”感興趣的小夥伴,歡迎加入QQ羣 813221712 討論交流,進羣請看羣公告!(可以點擊如下連接直接加入!)
點擊鏈接加入羣聊【Object Detection】:https://jq.qq.com/?_wv=1027&k=5kXCXF8

2、正題

參考鏈接:

https://www.runoob.com/numpy/numpy-statistical-functions.html

NumPy 提供了很多統計函數,用於從數組中查找最小元素,最大元素,百分位標準差和方差等。

2.1 numpy.amin() 和 numpy.amax()

numpy.amin() 用於計算數組中的元素沿指定軸的最小值。

numpy.amax() 用於計算數組中的元素沿指定軸的最大值。

實例:numpy.amin和numpy.amax的使用

import numpy as np 
 
a = np.array([[3,7,5],[8,4,3],[2,4,9]])  
print ('我們的數組是:')
print (a)

print ('調用 amin() 函數:')
print (np.amin(a,1))

print ('再次調用 amin() 函數:')
print (np.amin(a,0))

print ('調用 amax() 函數:')
print (np.amax(a))

print ('再次調用 amax() 函數:')
print (np.amax(a, axis =  0))

輸出結果爲:

我們的數組是:
[[3 7 5]
 [8 4 3]
 [2 4 9]]

調用 amin() 函數:
[3 3 2]

再次調用 amin() 函數:
[2 4 3]

調用 amax() 函數:
9

再次調用 amax() 函數:
[8 7 9]

2.2 numpy.ptp()

numpy.ptp()函數計算數組中元素最大值與最小值的差(最大值 - 最小值)。

實例:numpy.ptp使用

import numpy as np 
 
a = np.array([[3,7,5],[8,4,3],[2,4,9]])  
print ('我們的數組是:')
print (a)

print ('調用 ptp() 函數:')
print (np.ptp(a))

print ('沿軸 1 調用 ptp() 函數:')
print (np.ptp(a, axis =  1))

print ('沿軸 0 調用 ptp() 函數:')
print (np.ptp(a, axis =  0))

輸出結果爲:

我們的數組是:
[[3 7 5]
 [8 4 3]
 [2 4 9]]

調用 ptp() 函數:
7

沿軸 1 調用 ptp() 函數:
[4 5 7]

沿軸 0 調用 ptp() 函數:
[6 3 6]

2.3 numpy.percentile()

百分位數是統計中使用的度量,表示小於這個值的觀察值的百分比。 函數numpy.percentile()接受以下參數。

numpy.percentile(a, q, axis)

參數說明:

● a: 輸入數組
● q: 要計算的百分位數,在 0 ~ 100 之間
● axis: 沿着它計算百分位數的軸

首先明確百分位數:

第 p 個百分位數是這樣一個值,它使得至少有 p% 的數據項小於或等於這個值,且至少有 (100-p)% 的數據項大於或等於這個值。

舉個例子:高等院校的入學考試成績經常以百分位數的形式報告。比如,假設某個考生在入學考試中的語文部分的原始分數爲 54 分。相對於參加同一考試的其他學生來說,他的成績如何並不容易知道。但是如果原始分數54分恰好對應的是第70百分位數,我們就能知道大約70%的學生的考分比他低,而約30%的學生考分比他高。

這裏的 p = 70。

實例:numpy.percentile使用

import numpy as np 
 
a = np.array([[10, 7, 4], [3, 2, 1]])
print ('我們的數組是:')
print (a)
 
print ('調用 percentile() 函數:')
# 50% 的分位數,就是 a 裏排序之後的中位數
print (np.percentile(a, 50)) 
 
# axis 爲 0,在縱列上求
print (np.percentile(a, 50, axis=0)) 
 
# axis 爲 1,在橫行上求
print (np.percentile(a, 50, axis=1)) 
 
# 保持維度不變
print (np.percentile(a, 50, axis=1, keepdims=True))

輸出結果爲:

我們的數組是:
[[10  7  4]
 [ 3  2  1]]
調用 percentile() 函數:
3.5
[6.5 4.5 2.5]
[7. 2.]
[[7.]
 [2.]]

2.4 numpy.median()

numpy.median() 函數用於計算數組 a 中元素的中位數(中值)

實例:numpy.median使用

import numpy as np 
 
a = np.array([[30,65,70],[80,95,10],[50,90,60]])  
print ('我們的數組是:')
print (a)

print ('調用 median() 函數:')
print (np.median(a))

print ('沿軸 0 調用 median() 函數:')
print (np.median(a, axis =  0))

print ('沿軸 1 調用 median() 函數:')
print (np.median(a, axis =  1))

輸出結果爲:

我們的數組是:
[[30 65 70]
 [80 95 10]
 [50 90 60]]

調用 median() 函數:
65.0

沿軸 0 調用 median() 函數:
[50. 90. 60.]

沿軸 1 調用 median() 函數:
[65. 80. 60.]
2.5 numpy.mean()

numpy.mean() 函數返回數組中元素的算術平均值。 如果提供了軸,則沿其計算。

算術平均值是沿軸的元素的總和除以元素的數量。

實例:numpy.mean使用

import numpy as np 
 
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
print ('我們的數組是:')
print (a)

print ('調用 mean() 函數:')
print (np.mean(a))

print ('沿軸 0 調用 mean() 函數:')
print (np.mean(a, axis =  0))

print ('沿軸 1 調用 mean() 函數:')
print (np.mean(a, axis =  1))

輸出結果爲:

我們的數組是:
[[1 2 3]
 [3 4 5]
 [4 5 6]]

調用 mean() 函數:
3.6666666666666665

沿軸 0 調用 mean() 函數:
[2.66666667 3.66666667 4.66666667]

沿軸 1 調用 mean() 函數:
[2. 4. 5.]

2.6 numpy.average()

numpy.average() 函數根據在另一個數組中給出的各自的權重計算數組中元素的加權平均值。

該函數可以接受一個軸參數。 如果沒有指定軸,則數組會被展開。

加權平均值即將各數值乘以相應的權數,然後加總求和得到總體值,再除以總的單位數。

考慮數組[1,2,3,4]和相應的權重[4,3,2,1],通過將相應元素的乘積相加,並將和除以權重的和,來計算加權平均值。

加權平均值 = (14+23+32+41)/(4+3+2+1)
實例:numpy.average使用

import numpy as np 
 
a = np.array([1,2,3,4])  
print ('我們的數組是:')
print (a)

print ('調用 average() 函數:')
print (np.average(a))

# 不指定權重時相當於 mean 函數
wts = np.array([4,3,2,1])  
print ('再次調用 average() 函數:')
print (np.average(a,weights = wts))

# 如果 returned 參數設爲 true,則返回權重的和  
print ('權重的和:')
print (np.average([1,2,3,  4],weights =  [4,3,2,1], returned =  True))

輸出結果爲:

我們的數組是:
[1 2 3 4]

調用 average() 函數:
2.5

再次調用 average() 函數:
2.0

權重的和:
(2.0, 10.0)

在多維數組中,可以指定用於計算的軸。

實例:指定numpy.average的軸

import numpy as np 
 
a = np.arange(6).reshape(3,2)  
print ('我們的數組是:')
print (a)

print ('修改後的數組:')
wt = np.array([3,5])  
print (np.average(a, axis =  1, weights = wt))

print ('修改後的數組:')
print (np.average(a, axis =  1, weights = wt, returned =  True))

輸出結果爲:

我們的數組是:
[[0 1]
 [2 3]
 [4 5]]

修改後的數組:
[0.625 2.625 4.625]

修改後的數組:
(array([0.625, 2.625, 4.625]), array([8., 8., 8.]))

2.7 標準差

標準差是一組數據平均值分散程度的一種度量。

標準差是方差的算術平方根。

標準差公式如下:

std = sqrt(mean((x - x.mean())**2))
如果數組是 [1,2,3,4],則其平均值爲 2.5。 因此,差的平方是 [2.25,0.25,0.25,2.25],並且其平均值的平方根除以 4,即 sqrt(5/4) ,結果爲 1.1180339887498949。

實例:bp.std使用

import numpy as np 
 
print (np.std([1,2,3,4]))

輸出結果爲:

1.1180339887498949

2.8 方差

統計中的方差(樣本方差)是每個樣本值與全體樣本值的平均數之差的平方值的平均數,即 mean((x - x.mean())** 2)。

換句話說,標準差是方差的平方根。

實例:numpy.var使用

import numpy as np
 
print (np.var([1,2,3,4]))

輸出結果爲:

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