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)
的函数签名。- scale标量或字符串,可选
最终结果将除以比例尺的数值。默认值为 1.0。也接受字符串 “normal”,其结果是 scale 为 0.75 处的标准正态分位数函数的倒数,约为 0.67449。 也允许使用类似数组的比例尺,只要它能正确广播到输出,使
out / scale
是一个有效的操作。输出维度取决于输入数组 x 和 axis 参数。- nan_policy{‘propagate’, ‘raise’, ‘omit’}, 可选
定义当输入包含 nan 时如何处理。以下选项可用(默认值为“propagate”)
‘propagate’:返回 nan
‘raise’:抛出错误
‘omit’:执行计算时忽略 nan 值
- 返回:
- mad标量或 ndarray
如果
axis=None
,则返回标量。如果输入包含小于np.float64
精度的整数或浮点数,则输出数据类型为np.float64
。 否则,输出数据类型与输入的数据类型相同。
另请参阅
备注
center 参数仅影响计算 MAD 时所围绕的中心值。也就是说,传入
center=np.mean
将计算围绕均值的 MAD - 它不会计算平均绝对偏差。输入数组可能包含 inf,但如果 center 返回 inf,则该数据的对应 MAD 将为 nan。
参考文献
示例
当比较
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