median_abs_deviation#
- scipy.stats.median_abs_deviation(x, axis=0, center=<function median>, scale=1.0, nan_policy='propagate')[原始碼]#
計算資料沿給定軸的中位數絕對偏差。
中位數絕對偏差 (MAD,[1]) 計算與中位數的絕對偏差的中位數。它是一種與標準差相似的離散程度度量,但對離群值更穩健 [2]。
空陣列的 MAD 為
np.nan
。在版本 1.5.0 中新增。
- 參數:
- xarray_like
輸入陣列或可以轉換為陣列的物件。
- axisint 或 None,可選
計算範圍的軸。預設值為 0。如果為 None,則計算整個陣列的 MAD。
- centercallable,可選
一個將回傳中心值的函數。預設值是使用 np.median。任何使用者定義的函數都需要具有函數簽名
func(arr, axis)
。- scalescalar 或 str,可選
比例的數值將從最終結果中除掉。預設值為 1.0。字串 “normal” 也被接受,並導致 scale 為標準常態分位數函數在 0.75 處的倒數,約為 0.67449。也允許使用類似陣列的比例,只要它能正確廣播到輸出,使得
out / scale
是有效的運算。輸出維度取決於輸入陣列 x 和 axis 參數。- nan_policy{‘propagate’, ‘raise’, ‘omit’},可選
定義輸入包含 nan 時的處理方式。以下選項可用(預設為 ‘propagate’)
‘propagate’:回傳 nan
‘raise’:拋出錯誤
‘omit’:執行計算時忽略 nan 值
- 回傳:
- madscalar 或 ndarray
如果
axis=None
,則回傳一個純量。如果輸入包含整數或精度小於np.float64
的浮點數,則輸出資料類型為np.float64
。否則,輸出資料類型與輸入相同。
另請參閱
註解
center 參數僅影響計算 MAD 所圍繞的中心值。也就是說,傳入
center=np.mean
將計算圍繞平均值的 MAD - 它不會計算平均絕對偏差。輸入陣列可能包含 inf,但如果 center 回傳 inf,則該資料的相應 MAD 將為 nan。
參考文獻
[1]“Median absolute deviation”,https://en.wikipedia.org/wiki/Median_absolute_deviation
[2]“Robust measures of scale”,https://en.wikipedia.org/wiki/Robust_measures_of_scale
範例
當比較
median_abs_deviation
與np.std
的行為時,後者在我們將陣列的單個值更改為離群值時會受到影響,而 MAD 幾乎沒有變化>>> import numpy as np >>> from scipy import stats >>> x = stats.norm.rvs(size=100, scale=1, random_state=123456) >>> x.std() 0.9973906394005013 >>> stats.median_abs_deviation(x) 0.82832610097857 >>> x[0] = 345.6 >>> x.std() 34.42304872314415 >>> stats.median_abs_deviation(x) 0.8323442311590675
軸向處理範例
>>> x = np.array([[10, 7, 4], [3, 2, 1]]) >>> x array([[10, 7, 4], [ 3, 2, 1]]) >>> stats.median_abs_deviation(x) array([3.5, 2.5, 1.5]) >>> stats.median_abs_deviation(x, axis=None) 2.0
標準化範例
>>> x = stats.norm.rvs(size=1000000, scale=2, random_state=123456) >>> stats.median_abs_deviation(x) 1.3487398527041636 >>> stats.median_abs_deviation(x, scale='normal') 1.9996446978061115