亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

Numpy 的統計函數

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

常用的統計函數如下:

函數 說明
sum 對數組中的全部或沿著軸向的元素求和。
mean、median 求數組的算術平均值、中位數
std、var 分別為標準差和方差
min、max 最小值和最大值
argmin、argmax 分別為最小和最大元素的索引
cumsum 所有元素的累計和
cumprod 所有元素的累計積
percentile 計算數組的百分比分位數

1. 聚合計算

1.1 常用聚合方法舉例

sum、mean、std 等函數,可以實現聚合計算的效果,得到的結果的通常是零維的。此外,函數可以通過接收一個axis參數,指定聚合計算的方向,最終結果是一個少一維的數組。

案例

生成數組arr0,并查看:

arr0 = np.arange(16).reshape(4,4)

arr0
out:
    array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

分別對數組求和、求平均、求中位數、求方差和標準差:

print("數組求和結果為:", np.sum(arr0))
print("數組求平均結果為:", np.mean(arr0))
print("數組求中位數結果為:", np.median(arr0))
print("數組求方差結果為:", np.var(arr0))
print("數組求標準差結果為:", np.std(arr0))
print("數組求最小值為:", np.min(arr0))
print("數組求最大值為:", np.max(arr0))

輸出結果為:

數組求和結果為: 120
數組求平均結果為: 7.5
數組求中位數結果為: 7.5
數組求方差結果為: 21.25
數組求標準差結果為: 4.6097722286464435
數組求最小值為: 0
數組求最大值為: 15

案例

在進行統計運算的時候,也可以把統計函數作為數組的實例方法進行調用。例如,上述的語法可以改寫成:

print("數組求和結果為:", arr0.sum())
print("數組求平均結果為:", arr0.mean())
print("數組求方差結果為:", arr0.var())
print("數組求標準差結果為:", arr0.std())
print("數組求最小值為:", arr0.min())
print("數組求最大值為:", arr0.max())

輸出結果為:

數組求和結果為: 120
數組求平均結果為: 7.5
數組求方差結果為: 21.25
數組求標準差結果為: 4.6097722286464435
數組求最小值為: 0
數組求最大值為: 15

注意,中位數 median 求解無法用上述方法調用。

案例

對于二維數組,最外層的軸(也即垂直方向)記為axis=0,內層的軸(也即水平方向)記為axis=1。在調用統計函數的時候,可以通過指定axis來明確聚合的方向。

例如,對 arr0 進行統計方法的水平方向聚合:

print("數組水平方向求和結果為:", np.sum(arr0, axis=1))
print("數組水平方向求平均結果為:", np.mean(arr0, axis=1))
print("數組水平方向求中位數結果為:", np.median(arr0, axis=1))
print("數組水平方向求方差結果為:", np.var(arr0, axis=1))
print("數組水平方向求標準差結果為:", np.std(arr0, axis=1))
print("數組水平方向求最小值為:", np.min(arr0, axis=1))
print("數組水平方向求最大值為:", np.max(arr0, axis=1))

輸出結果為:

數組水平方向求和結果為: [ 6 22 38 54]
數組水平方向求平均結果為: [ 1.5  5.5  9.5 13.5]
數組水平方向求中位數結果為: [ 1.5  5.5  9.5 13.5]
數組水平方向求方差結果為: [1.25 1.25 1.25 1.25]
數組水平方向求標準差結果為: [1.11803399 1.11803399 1.11803399 1.11803399]
數組水平方向求最小值為: [ 0  4  8 12]
數組水平方向求最大值為: [ 3  7 11 15]

同樣地,實例調用方法也可以實現上述效果:

print("數組垂直方向求和結果為:", arr0.sum(axis=1))

輸出結果為:

數組垂直方向求和結果為: [24 28 32 36]

2. 其他函數運算

2.1 累計和、累計積

cumsum 和 cumprod 則不聚合,而是產生一個由中間結果組成的數組。

案例

計算 arr0 的累計和:

np.cumsum(arr0)

輸出結果為:

array([  0,   1,   3,   6,  10,  15,  21,  28,  36,  45,  55,  66,  78,
        91, 105, 120], dtype=int32)

可以看出,如果不指定方向,則會把數組展開為一維數組并進行累計運算。

案例

分別計算水平方向的累計和和垂直方向的累計積:

print("計算水平方向的累計和", arr0.cumsum(axis=1))
print("計算垂直方向的累計積", arr0.cumprod(axis=0))

輸出結果為:

計算水平方向的累計和 [[ 0  1  3  6]
 [ 4  9 15 22]
 [ 8 17 27 38]
 [12 25 39 54]]
計算垂直方向的累計積 [[   0    1    2    3]
 [   0    5   12   21]
 [   0   45  120  231]
 [   0  585 1680 3465]]

2.2 計算百分位數

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

numpy.percentile(a, q, axis)

參數說明:

參數 說明
a 輸入數組
q 要計算的百分位數,在 0 ~ 100 之間
axis 沿著它計算百分位數的軸

首先明確百分位數 P 的概念

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

案例

對數組 arr0 水平方向的中位數(百分之五十分位數),也可以按照如下寫法:

np.percentile(arr0, 50, axis=1)

輸出結果為:

array([ 1.5,  5.5,  9.5, 13.5])

3. 小結

本節介紹了常用的統計函數。在對部分統計函數進行調用,除了以函數的方法,也可以以數組實例方法調用。特別地,可以通過指定 axis 的值,來規定統計計算的方向。

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