scipy.stats.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 新版功能.

参数
xarray_like

可以转换为数组的输入数组或对象。

axis整型或整型序列,可选

沿其计算范围的轴。默认情况下,计算整个阵列的IQR。

rng包含以下范围内的浮点数的两元素序列 [0,100] 可选

要计算范围的百分位数。每个值必须介于0和100之间(包括0和100)。默认值为真实IQR: (25, 75) 。元素的顺序并不重要。

scale标量或字符串,可选

比例尺的数值将从最终结果中除以。可以识别以下字符串值:

  • ‘Raw’:不需要缩放,只需返回原始IQR即可。 已弃用! 使用 scale=1 取而代之的是。

  • “正常” : Scale by \(2 \sqrt{{2}} erf^{{-1}}(\frac{{1}}{{2}}) \approx 1.349\)

默认值为1.0。不推荐使用scale=‘raw’。也可以使用类似数组的比例,只要它正确广播到输出即可 out / scale 是有效的操作。输出维度取决于输入阵列, x ,即 axis 参数,并且 keepdims 旗帜。

nan_policy{‘Propagate’,‘RAISE’,‘OMIT’},可选

定义输入包含NaN时的处理方式。以下选项可用(默认值为‘Propagate’):

  • ‘Propagate’:返回NaN

  • “raise”:引发错误

  • ‘omit’:执行计算时忽略NaN值

interpolation{‘线性’,‘较低’,‘较高’,‘中点’,

‘最近’},可选

指定当百分位边界位于两个数据点之间时要使用的插值方法 ij 。以下选项可用(默认为“线性”):

  • ‘线性’: i + (j - i) * fraction ,在哪里 fraction 是索引的小数部分,由 ij

  • ‘较低’: i

  • ‘更高’: j

  • “最近”: ij 以最近者为准。

  • ‘中间点’: (i + j) / 2

keepdims布尔值,可选

如果将其设置为 True ,减少的轴将作为尺寸为1的尺寸保留在结果中。使用此选项,结果将根据原始阵列正确广播 x

退货
iqr标量或ndarray

如果 axis=None ,则返回标量。如果输入包含的整数或浮点数的精度小于 np.float64 ,则输出数据类型为 np.float64 。否则,输出数据类型与输入数据类型相同。

注意事项

此函数在很大程度上依赖于的版本 numpy 已安装。强烈推荐1.11.0b3以上的版本,因为它们包括许多增强和修复 numpy.percentilenumpy.nanpercentile 会影响此功能的操作。以下修改适用:

低于1.10.0: nan_policy 定义不明确。NaN_POLICY定义不正确。

的默认行为 numpy.percentile 用于“传播”。这是“省略”和“传播”的混合体,主要生成“省略”的歪斜版本,因为NAN被排序到数据的末尾。如果数据中有NAN,则会发出警告。

低于1.9.0: numpy.nanpercentile 并不存在。

这意味着 numpy.percentile 无论在什么情况下都会使用 nan_policy 并发出警告。有关行为的描述,请参见上一项。

低于1.9.0: keepdimsinterpolation 不受支持。

如果使用非默认值提供关键字,则会忽略这些关键字并显示警告。但是,仍支持多个轴。

参考文献

1

“四分位数范围”https://en.wikipedia.org/wiki/Interquartile_range

2

“规模的稳健衡量”(Robust Measures Of Scale)https://en.wikipedia.org/wiki/Robust_measures_of_scale

3

“分位数”https://en.wikipedia.org/wiki/Quantile

示例

>>> 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.]])