數學統計在我們的程序當中特別是數據分析當中是必不可少的一部分,本文就來介紹一下 NumPy 常見的統計函數。
最大值與最小值
numpy.amin()
用于計算數組中的元素沿指定軸的最小值。
可以通過 axis 參數傳入坐標軸來指定統計的軸,當指定 axis 時,axis 的范圍為 ndarray 的維度范圍,可以利用 shape 函數獲取 ndrray 的維度。我們來看例子:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始數組:")
print(a)
print('n')
print(np.char.center('最小值', 15, '*'))
print("所有維度的最小值:")
print(np.amin(a))
print('n')
print("0軸的最小值:")
print(np.amin(a, 0))
print('n')
print("1軸的最小值:")
print(np.amin(a, 1))
print('n')
# 返回
初始數組:
[[1 2 3]
[4 5 6]
[7 8 9]]
******最小值******
所有維度的最小值:
1
0軸的最小值:
[1 2 3]
1軸的最小值:
[1 4 7]
我們例子中使用的是二維數組,所以 axis 只有取0和1兩個值。其實我們還可以用 numpy.min() 來計算,效果是一樣的,只不過 NumPy 的官方文檔上沒有寫 numpy.min() 這個方法,看源碼我們知道這個方法其實是 numpy.amin() 的別名。
numpy.amax()
用于計算數組中的元素沿指定軸的最大值。
可以通過 axis 參數傳入坐標軸來指定統計的軸,當指定 axis 時,axis 的范圍為 ndarray 的維度范圍,可以利用 shape 函數獲取 ndrray 的維度。我們來看例子:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始數組:")
print(a)
print('n')
print(np.char.center('最大值', 15, '*'))
print("所有維度的最大值:")
print(np.amax(a))
print('n')
print("0軸的最大值:")
print(np.amax(a, 0))
print('n')
print("1軸的最大值:")
print(np.amax(a, 1))
print('n')
# 返回
初始數組:
[[1 2 3]
[4 5 6]
[7 8 9]]
******最大值******
所有維度的最大值:
9
0軸的最大值:
[7 8 9]
1軸的最大值:
[3 6 9]
這個函數和 numpy.amin() 函數是相反的含義,也可以用 numpy.max() 來計算。
numpy.ptp()
計算數組中元素最大值與最小值的差(最大值 - 最小值)。
實例:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始數組:")
print(a)
print('n')
print(np.char.center('最大值與最小值的差', 15, '*'))
print("所有維度的極差:")
print(np.ptp(a))
print('n')
print("0軸的極差:")
print(np.ptp(a, 0))
print('n')
print("1軸的極差:")
print(np.ptp(a, 1))
print('n')
# 返回
***最大值與最小值的差***
所有維度的極差:
8
0軸的極差:
[6 6 6]
1軸的極差:
[2 2 2]
這個方法可以迅速的找出數組中任何維度的最大最小值之差,還是很方便的。
中位數
numpy.percentile()
百分位數是統計中使用的度量,表示小于這個值的觀察值的百分比。
numpy.percentile(a, q, axis) 接收以下參數:
a: 輸入數組
q: 要計算的百分位數,在 0 ~ 100 之間
axis: 沿著它計算百分位數的軸
這個百分位怎么理解呢?
例如第60個百分位是這樣一個值,它使得至少有60%的數據項小于或等于這個值,且至少有40%的數據項大于或等于這個值。
我們來看看實例:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始數組:")
print(a)
print('n')
print(np.char.center('百分位數', 15, '*'))
print("50%的分位數,即數組排序之后的中位數:")
print(np.percentile(a, 50))
print('n')
print("0軸的中位數:")
print(np.percentile(a, 50, 0))
print('n')
print("1軸的中位數:")
print(np.percentile(a, 50, 1))
print('n')
# 返回
******百分位數*****
50%的分位數,即數組排序之后的中位數:
5.0
0軸的中位數:
[4. 5. 6.]
1軸的中位數:
[2. 5. 8.]
numpy.median()
用于計算數組 a 中元素的中位數(中值)
我們來看實例:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始數組:")
print(a)
print('n')
print(np.char.center('計算中位數', 15, '*'))
print("所有元素的中位數:")
print(np.median(a))
print('n')
print("0軸的中位數:")
print(np.median(a, 0))
print('n')
print("1軸的中位數:")
print(np.median(a, 1))
print('n')
# 返回
*****計算中位數*****
所有元素的中位數:
5.0
0軸的中位數:
[4. 5. 6.]
1軸的中位數:
[2. 5. 8.]
總數與均值
numpy.sum()
用于按指定軸計算數組中的元素的和。
實例:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始數組:")
print(a)
print('n')
print(np.char.center('求和', 15, '*'))
print("所有維度的和:")
print(np.sum(a))
print('n')
print("按0軸求和:")
print(np.sum(a, 0))
print('n')
print("按1軸求和:")
print(np.sum(a, 1))
print('n')
# 返回
*******求和******
所有維度的和:
45
按0軸求和:
[12 15 18]
按1軸求和:
[ 6 15 24]
不管按哪個維度求和,得出的結果再相加肯定等于所有維度求和的結果。
numpy.mean()
按軸計算數組中元素的算術平均值。
算術平均值是沿軸的元素的總和除以元素的數量。我們來看實例:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("初始數組:")
print(a)
print('n')
print(np.char.center('計算算術平均值', 15, '*'))
print("所有元素的算術平均值:")
print(np.mean(a))
print('n')
print("0軸的算術平均值:")
print(np.mean(a, 0))
print('n')
print("1軸的算術平均值:")
print(np.mean(a, 1))
print('n')
# 返回
****計算算術平均值****
所有元素的算術平均值:
5.0
0軸的算術平均值:
[4. 5. 6.]
1軸的算術平均值:
[2. 5. 8.]
numpy.average()
根據在另一個數組中給出的各自的權重計算數組中元素的加權平均值,該函數可以接收一個軸參數,如果沒有指定軸,則數組會被展開。
加權平均值是由每個分量乘以權重因子得到的平均值。即將各數值乘以相應的權數,然后加總求和得到總體值,再除以總的單位數。
舉個例子:數組[1, 2, 3, 4]對應的權重是[4, 3, 2, 1],那么加權平均值的計算公式為:
加權平均值=(14+23+32+41)/(4+3+2+1)
實例:
import numpy as np
print(np.char.center('加權平均值', 15, '*'))
b = np.array([1, 2, 3, 4])
print("所有元素的加權平均值(不指定權重相當于求平均值):")
print(np.average(b))
print('n')
print("指定權重的加權平均值:")
print(np.average(b, weights=[4, 3, 2, 1]))
print('n')
print("指定權重的加權平均值以及權重的和:")
print(np.average(b, weights=[4, 3, 2, 1], returned=True))
print('n')
# 返回
*****加權平均值*****
所有元素的加權平均值(不指定權重相當于求平均值):
2.5
指定權重的加權平均值:
2.0
指定權重的加權平均值以及權重的和:
(2.0, 10.0)
我們可以通過returned參數來設置是否返回權重的和。在上例中,權重數組中元素相加等于10。
方差與標準差
numpy.var()
計算數組中元素的方差
統計中的方差(樣本方差)是每個樣本值與全體樣本值的平均數之差的平方值的平均數。計算公式為:
mean((x - x.mean())** 2)。
我們來看實例:
import numpy as np
print(np.char.center('計算方差', 15, '*'))
print(np.var([1, 2, 3, 4]))
print('n')
# 返回
******計算方差*****
1.25
numpy.std()
計算數組中袁術的標準差
標準差是一組數據平均值分散程度的一種度量,是方差的算術平方根。標準差公式如下:
std = sqrt(mean((x - x.mean())**2))
我們來看實例:
import numpy as np
print(np.char.center('計算標準差', 15, '*'))
print(np.std([1, 2, 3, 4]))
print('n')
# 返回
*****計算標準差*****
1.118033988749895
總結
本文向大家介紹了 NumPy 的統計函數,包括最大最小值函數、總數與均值函數、中位數函數以及方差與標準差函數。這些函數主要運用在一些數據分析的統計工作中,我們可以不用實現這些統計方法的原理而直接使用函數,使我們的代碼簡潔而高效。