Numpy方法确定数组中导致高差异的值

时间:2013-08-17 10:33:57

标签: python numpy

是否有一种简单的方法来确定数组中导致高差异的值?

考虑一组数字

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

但是,如何确定违规值?

1 个答案:

答案 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)