iqr#
- scipy.stats.iqr(x, axis=None, rng=(25, 75), scale=1.0, nan_policy='propagate', interpolation='linear', keepdims=False)[源代码]#
计算指定轴上数据的四分位距。
四分位距(IQR)是数据的第 75 个百分位数和第 25 个百分位数之间的差值。它是一种类似于标准差或方差的离散度度量,但对于异常值更稳健 [2]。
rng
参数允许此函数计算除实际 IQR 之外的其他百分位数范围。例如,设置rng=(0, 100)
等价于numpy.ptp
。空数组的 IQR 是 np.nan。
在 0.18.0 版本中添加。
- 参数:
- x类数组
可以转换为数组的输入数组或对象。
- axisint 或 None,默认值:None
如果为 int,则为输入计算统计量的轴。输入的每个轴切片(例如,行)的统计量将出现在输出的相应元素中。如果为
None
,则在计算统计量之前,输入将被展平。- rng包含 [0,100] 范围内浮点数的双元素序列,可选
计算范围的百分位数。每个值必须介于 0 和 100 之间,包括 0 和 100。默认值是真实的 IQR:
(25, 75)
。元素的顺序不重要。- scale标量或字符串或实数类数组,可选
比例的数值将从最终结果中除掉。还可识别以下字符串值
‘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.]])