NumPy 的統計函數可以實現對整個數組或者是沿着數組軸方向的統計計算,常用的統計函數有求最大值和最小值,求和與平均值,計算百分位數、中位數、標准差和方差等。
求最大值和最小值的函數
在 NumPy 中,求數組最大值的函數是 amax() 和 nanmax(),求數組最小值的函數是 amin() 和 nanmin(),其中,amax() 和 amin() 函數用於返回一個數組的最大值和最小值或者是沿軸返回數組的最大值和最小值;nanmax() 函數和 nanmin() 函數用於返回忽略任何 NaN 的數組的最大值和最小值或者是沿軸返回忽略任何 NaN 的數組的最大值和最小值。
amax() #函數的格式如下:
函數中的參數說明如下:
- a:輸入數據;
- axis:指定沿着某個軸來計算最大值,axis=0 表示按列,axis=1 表示按行,默認值 None 表示對整個數組;
- out:替代輸出數組,用於放置結果,默認值為 None;
- keepdims:默認值為 False,輸出行維度為 1,如果設置為 True,則輸出列維度為 1。
amax() 函數除了 a 參數外,其余參數為可選項。而 amin()、nanmax()、nanmin() 與 amax() 的函數格式和參數相同。另外,也可以使用 max() 函數和 min() 函數求序列或數組的最大值和最小值。但是對於大型數組而言,使用 amax() 函數和 amin() 函數性能會更好。
example:
# -*- coding: utf-8 -*-
import numpy as np
arr = np.array([[0,3,1,5],[2,4,6,1],[2,8,9,2]])
#求arr數組的最大值
max1 = np.amax(arr)
#求arr數組垂直方向的最大值
max2 = np.amax(arr,axis=0)
#求arr數組水平方向的最大值
max3 = np.amax(arr,axis=1)
max4 = np.max(arr,axis=1)
print(max1,max2,max3,max4)
#amin函數與nanmin函數的區別
arr = np.arange(5, dtype=float)
print(arr) # [0. 1. 2. 3. 4.]
arr[3] = np.nan
a = np.amin(arr)
print(a) # 用amin函數輸出NaN
b = np.nanmin(arr)
print(b) #用nanmin函數輸出0.0
求沿軸方向的取值范圍
在 NumPy 中,使用 ptp() 函數能返回沿某軸(axis)方向上的最大值與最小值的差值,即 maximum-minimum 的值形成的數組。ptp() 函數的格式如下:
numpy.ptp(a,[axis=None[,out=None]])
函數中的參數說明如下:
- a:輸入數據;
- axis:指定沿着某個軸來計算差值,axis=0 表示按列,axis=1 表示按行,默認值 None 表示對整個數組;
- out:替代輸出數組,用於放置結果,默認值為 None。
該函數除了 a 參數外,其余參數為可選項。
example:
# -*- coding: utf-8 -*-
import numpy as np
arr = np.arange(12).reshape((3,4))
a = np.ptp(arr, axis=0)
print(a) #[8 8 8 8] 差值形成的數組
b = np.ptp(arr, axis=1)
print(b) #[3 3 3]差值形成的數組
求百分位數
在 NumPy 中,使用 percentile() 和 nanpercentile() 函數可以沿某軸(axis)方向計算數組中第 q 數值的百分位數。percentile() 函數的格式如下:
percentile(a,q[, axis, out, …])
函數中的主要參數說明如下:
- a:數組或可以轉化成數組的對象;
- q:[0,100] 范圍的浮點數;
- axis:指定沿着某個軸來計算百分位數,axis=0 表示按列,axis=1 表示按行,默認值 None 表示對整個數組。
percentile() 函數除了 a、q 參數外,其余參數為可選項。percentile() 函數還可以計算多維數組的任意百分比分位數。所謂百分比分位數就是位於 q% 位置處的值,稱為第 q 百分位數。但要注意,數列要遞增排序后再計算。
nanpercentile() 函數格式與 percentile() 函數格式相同,只是在計算百分位數時會忽略數組中的 NaN 值。
求中位數
在 NumPy 中,利用 median() 和 nanmean() 函數可以沿某軸(axis)方向計算數組中的中位數。median() 函數格式如下:
numpy.median(a[, axis, out, overwrite_input, keepdims])
函數中的主要參數說明如下:
- a:數組或可以轉化成數組的對象;
- axis:指定沿着某個軸來計算中位數,axis=0 表示按列,axis=1 表示按行,默認值 None 表示對整個數組。
median() 函數除了 a 參數外,其余參數為可選項。median() 相當於 percentile() 函數在參數 q=50 時的值。
nanmedian() 函數是計算數組a在沿某軸(axis)方向上忽略 NaN 值的中位數。
求和與加權平均值
在 NumPy 中,sum() 函數是沿某軸(axis)方向計算數組中相關元素之和,函數格式如下:
sum(a[, axis=None])
average()函數是沿某軸(axis)方向計算數組中相關元素的加權平均值。加權平均值的數學概念是有 n 個數 X1,X2,…,Xn 的權分別是 W1,W2,…,Wn,那么,這 n 個數的加權平均值為:(X1W1+X2W2+…+XnWn)/(W1+W2+…+Wn)
當每個數對應的權重為 1 時,也就是計算平均數。average() 函數的格式如下:
average(a[, axis=None, weights=None])
函數中的主要參數說明如下:
- a:輸入數組;
- axis:指定沿着某個軸來計算和或平均值,axis=0 表示按列,axis=1 表示按行,默認值 None 表示對整個數組;
- weights:表示權重值。當權重值為一維數組時,其長度必須與沿指定軸方向的長度一致。另外,權重值數組也可以與 a 數組的形狀相同。
sum() 和 average() 函數除了 a 參數外,其余參數為可選項。
算術平均數
算術平均數是所有元素的總和除以元素的數量。在 NumPy 中,mean() 和 nanmean() 函數可以計算數組或者軸方向的算術平均數,函數格式如下:
mean(a[, axis=None])
函數中的主要參數說明如下:
- a:輸入數組;
- axis:指定沿着某個軸來計算算術平均數,axis=0 表示按列,axis=1 表示按行,默認值 None 表示對整個數組。
mean() 函數除了 a 參數外,其余參數為可選項。nanmean() 函數在計算算術平均數時如果遇到 NaN 值會忽略。
標准差
標准差也稱為標准偏差,其定義是總體中各單位標准值與其平均數離差平方的算術平均數的平方根,它反映組內個體間的離散程度。在 NumPy 中,計算標准差的函數有 std() 和 nanstd()。std() 函數的格式如下:
numpy.std(a[, axis=None])
函數中的主要參數說明如下:
- a:輸入數組;
- axis:指定沿着某個軸來計算標准差,axis=0 表示按列,axis=1 表示按行,默認值 None 表示對整個數組。
std() 函數除了 a 參數外,其余參數為可選項。nanstd() 函數在計算標准差時如果遇到 NaN 值會忽略。
方差
方差是元素與元素的平均數差的平方的平均數 mean(abs(x - x.mean())**2)。在 NumPy 中,計算方差的函數有 var() 和 nanvar()。var() 函數的格式如下:
numpy.var(a[, axis=None,dtype=None])
函數中的主要參數說明如下:
a:輸入數組;
axis:指定沿着某個軸來計算方差,axis=0 表示按列,axis=1 表示按行,默認值 None 表示對整個數組;
dtype:數據類型。
var() 函數除了 a 參數外,其余參數都為可選項。nanvar() 函數在計算方差時會忽略數組中的 NaN 值。