scipy.stats.mstats.

winsorize#

scipy.stats.mstats.winsorize(a, limits=None, inclusive=(True, True), inplace=False, axis=None, nan_policy='propagate')[源代码]#

返回输入数组的 Winsorized 版本。

第 (limits[0]) 个最低值设置为第 (limits[0]) 个百分位数,第 (limits[1]) 个最高值设置为第 (1 - limits[1]) 个百分位数。跳过被掩码的值。

参数:
a序列

输入数组。

limits{None, float 元组}, 可选

要在数组每侧截断的百分比的元组,相对于未掩码数据的数量,作为 0. 到 1. 之间的浮点数。 记 n 为截断前未掩码数据的数量,则第 (n*limits[0]) 个最小的数据和第 (n*limits[1]) 个最大的数据被掩码,截断后未掩码数据的总数为 n*(1.-sum(limits))。可以将一个 limit 的值设置为 None 以指示开区间。

inclusive{(True, True) 元组}, 可选

元组,指示每侧被掩码的数据数量应被截断 (True) 还是四舍五入 (False)。

inplace{False, True}, 可选

是否就地 winsorize (True) 或使用副本 (False)

axis{None, int}, 可选

沿其截断的轴。如果为 None,则截断整个数组,但保持其形状。

nan_policy{‘propagate’, ‘raise’, ‘omit’}, 可选

定义当输入包含 nan 时如何处理。以下选项可用(默认为 'propagate')

  • ‘propagate’:允许 nan 值,并且可能会覆盖或传播它们

  • ‘raise’:抛出错误

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

注释

应用此函数通过限制极端值来减少可能存在的虚假异常值的影响。

示例

>>> import numpy as np
>>> from scipy.stats.mstats import winsorize

一个打乱的数组包含从 1 到 10 的整数。

>>> a = np.array([10, 4, 9, 8, 5, 3, 7, 2, 1, 6])

替换 10% 的最低值(即 1)和 20% 的最高值(即 910)。

>>> winsorize(a, limits=[0.1, 0.2])
masked_array(data=[8, 4, 8, 8, 5, 3, 7, 2, 2, 6],
             mask=False,
       fill_value=999999)