iqr#
- scipy.stats.iqr(x, axis=None, rng=(25, 75), scale=1.0, nan_policy='propagate', interpolation='linear', keepdims=False)[source]#
计算指定轴上数据的四分位距。
四分位距 (IQR) 是数据的第 75 个百分位数和第 25 个百分位数之间的差值。它是一种类似于标准差或方差的离散度量,但对异常值更具鲁棒性 [2]。
rng
参数允许此函数计算除实际 IQR 之外的其他百分位数范围。例如,设置rng=(0, 100)
等同于numpy.ptp
。空数组的 IQR 是 np.nan。
0.18.0 版本新增。
- 参数:
- xarray_like
输入数组或可以转换为数组的对象。
- axisint 或 None,默认值:None
如果为 int,则为计算统计量的输入沿哪个轴。输入的每个轴切片(例如行)的统计量将出现在输出的相应元素中。如果为
None
,则在计算统计量之前,输入将被展平。- rng包含范围 [0,100] 中浮点数的双元素序列,可选
计算范围的百分位数。每个百分位数必须介于 0 和 100 之间(包括 0 和 100)。默认值为真正的 IQR:
(25, 75)
。元素的顺序并不重要。- scale标量或 str 或实数的类数组,可选
比例的数值将从最终结果中除掉。以下字符串值也被识别
‘normal’:按 \(2 \sqrt{2} erf^{-1}(\frac{1}{2}) \approx 1.349\) 缩放。
默认值为 1.0。也允许实数 dtype 的类数组 scale,只要它正确地广播到输出,使得
out / scale
是一个有效的运算。输出维度取决于输入数组 x、axis 参数和 keepdims 标志。- nan_policy{‘propagate’,‘omit’,‘raise’}
定义如何处理输入 NaN。
propagate
:如果存在 NaN 在沿轴切片(例如行)中,则计算统计量,输出的相应条目将为 NaN。omit
:执行计算时将省略 NaN。如果沿轴切片计算统计量时剩余数据不足,则输出的相应条目将为 NaN。raise
:如果存在 NaN,则会引发ValueError
。
- interpolationstr,可选
指定当百分位数边界位于两个数据点
i
和j
之间时要使用的插值方法。以下选项可用(默认为“linear”)‘linear’:
i + (j - i)*fraction
,其中fraction
是由i
和j
包围的索引的小数部分。‘lower’:
i
。‘higher’:
j
。‘nearest’:
i
或j
,以最近者为准。‘midpoint’:
(i + j)/2
。
对于 NumPy >= 1.22.0,
numpy.percentile
的method
关键字提供的其他选项也有效。- keepdimsbool,默认值:False
如果设置为 True,则缩减的轴将保留在结果中,作为大小为 1 的维度。使用此选项,结果将针对输入数组正确广播。
- 返回:
- iqr标量或 ndarray
如果
axis=None
,则返回标量。如果输入包含小于np.float64
精度的整数或浮点数,则输出数据类型为np.float64
。否则,输出数据类型与输入的数据类型相同。
备注
从 SciPy 1.9 开始,
np.matrix
输入(不建议用于新代码)在执行计算之前会转换为np.ndarray
。在这种情况下,输出将是标量或具有适当形状的np.ndarray
,而不是 2Dnp.matrix
。同样,虽然掩码数组的掩码元素会被忽略,但输出将是标量或np.ndarray
,而不是mask=False
的掩码数组。参考文献
[3]示例
>>> import numpy as np >>> from scipy.stats import iqr >>> x = np.array([[10, 7, 4], [3, 2, 1]]) >>> x array([[10, 7, 4], [ 3, 2, 1]]) >>> iqr(x) 4.0 >>> iqr(x, axis=0) array([ 3.5, 2.5, 1.5]) >>> iqr(x, axis=1) array([ 3., 1.]) >>> iqr(x, axis=1, keepdims=True) array([[ 3.], [ 1.]])