是否有一种简单的方法来确定数组中导致高差异的值?
考虑一组数字
array([164, 202, 164, 164, 164, 166], dtype=uint16)
快速扫描显示,202会导致高差异,如果我从列表中删除会大大减少差异
>>> np.var(np.array([164, 202, 164, 164, 164, 166]))
196.88888888888886
并从上面的列表中删除202会大大减少差异
>>> np.var(np.array([164, 164, 164, 164, 166]))
0.64000000000000012
但是,如何确定违规值?
答案 0 :(得分:5)
假设这是您的数据:
In [19]: import numpy as np
In [167]: x = np.array([164, 202, 164, 164, 164, 166], dtype=np.uint16)
这是一个布尔数组,表明x
中的哪些值与均值相差超过1个标准差:
In [170]: abs(x-x.mean()) > x.std()
Out[170]: array([False, True, False, False, False, False], dtype=bool)
我们可以使用布尔数组作为所谓的“花式索引”来检索远离平均值超过1个标准偏差的值:
In [171]: x[abs(x-x.mean()) > x.std()]
Out[171]: array([202], dtype=uint16)
或者,反转不等式以获取删除“异常值”的数据:
In [172]: x[abs(x-x.mean()) <= x.std()]
Out[172]: array([164, 164, 164, 164, 166], dtype=uint16)