【发布时间】:2020-06-23 09:39:47
【问题描述】:
大家好,这个问题可能更多是关于逻辑而不是代码,希望有人可以点亮它。
所以,我有一个包含一些异常值的数据列表,我想通过使用列表中每个项目之间的差异并确定差异太大的位置来删除它。
在此示例中,我想从数据列表中删除索引 [2,3,4]。最好的方法是什么??
我尝试使用 np.argwhere() 方法来查找索引,但是,我被困在如何使用它的结果来切片 np.array??
data=[4.0, 4.5, 22.5, 40.5, 22.5, 3.5, 3.0, 3.5, 4.5, 3.5, 2.5]
data=np.array(data)
d = data[:-1] - data[1:]
print(np.mean(d))
在此示例中,当我打印差异 (d) 时,它返回给我:
print(d) # returns:[ -0.5 -18. -18. 18. 19. 0.5 -0.5 -1. 1. 1. ]
这很好。现在,我应用的逻辑是指出在 d 中我们有一个高于原始数据平均值的数字。
x = np.argwhere(d>np.mean(data))
print(x) # returns: array([3], dtype=int64), array([4], dtype=int64)
indices_to_extract = [x[0]-1,x[-1]]
print(indices_to_extract) # returns: [array([2], dtype=int64), array([[4]], dtype=int64)]
a1 = np.delete(r,indices_to_extract,axis=0)
print(a1) #returns: [ 4. 4.5 40.5 3.5 3. 3.5 4.5 3.5 2.5]
#Desirable return:
[ 4. 4.5 3.5 3. 3.5 4.5 3.5 2.5]
主要问题是,如何从可用于切片的 np.argwhere() 数字范围中得出结果??
【问题讨论】:
-
这是一个如何用这种方法去除异常值的问题,或者什么是去除异常值的最佳方法?因为有比简单距离更好的方法来检测异常值。
标签: python python-3.x list numpy numpy-slicing