最佳答案
是否有一个麻木的内建来做类似下面这样的事情?也就是说,获取一个列表 d
并返回一个列表 filtered_d
,根据假定的 d
中各点的分布情况删除任何外围元素。
import numpy as np
def reject_outliers(data):
m = 2
u = np.mean(data)
s = np.std(data)
filtered = [e for e in data if (u - 2 * s < e < u + 2 * s)]
return filtered
>>> d = [2,4,5,1,6,5,40]
>>> filtered_d = reject_outliers(d)
>>> print filtered_d
[2,4,5,1,6,5]
我说“差不多”是因为函数可能允许不同的分布(泊松分布、高斯分布等)和这些分布内不同的异常值阈值(如我在这里使用的 m
)。