median_abs_deviation#
- scipy.stats.median_abs_deviation(x, axis=0, center=<function median>, scale=1.0, nan_policy='propagate')[source]#
根据给定轴计算数据的绝对中位数偏差。
中位绝对偏差(MAD,[1])计算中位数在绝对偏差中。这是一个类似于标准差但对异常值更稳健的离散度测量方法 [2]。
空数组的 MAD 为
np.nan
。1.5.0 版中新增。
- 参数:
- xarray_like
输入数组或可转换为数组的对象。
- axisint 或 None,可选
计算范围的轴。默认值为 0。如果为 None,则计算整个数组的 MAD。
- center可调用对象,可选
将返回中心值的一个函数。默认使用 np.median。使用的任何用户定义函数都需要具有
func(arr, axis)
这样的函数签名。- scale标量或字符串,可选
将缩放的数值除于最终结果。默认值为 1.0。字符串“normal”也受支持,结果中scale 是标准正态分布分位数函数在 0.75 时的逆,其约为 0.67449。允许使用类似于数组的 scale,只要它可以正确广播到输出,使
out / scale
成为有效操作。输出维度取决于输入数组x和axis参数。- nan_policy{‘propagate’, ‘raise’, ‘omit’}, optional
定义在输入包含 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