首页 > 解决方案 > 如何在python中按多数过滤掉列表?

问题描述

我目前正在研究一种算法,该算法从超声波传感器(距离传感器)中获取值,该传感器不断读取并计算最后 10 个取值的平均值。问题是超声波传感器会有随机尖峰,这会显着偏离平均读数

example of readings

19.42
19.43
130.50
19.46
19.44
19.42
144.52
19.4
145.90
19.37
[Average Distance:23] #just a example not actual results

所以现在我想知道是否有任何方法可以忽略基于多数的高值,比如如果列表中有大多数小值,它将忽略高值,反之亦然,如果有大多数高值忽略小值。

example of desired result

19.42
19.43
130.50  
19.46
19.44
19.42
144.52
19.4
145.90
19.37
[Average Distance:19]  #ignored spiked values are the majority of numbers are 19

如果需要进一步的解释/示例,请告诉我,提前谢谢你。

标签: python

解决方案


你可以使用numpy.median

import numpy as np
vals = np.array([19.42
,19.43
,130.50  
,19.46
,19.44
,19.42
,144.52
,19.4
,145.90
,19.37])
np.median(vals)

产生 19.435。中位数是一个点,使得一半的观察值高于一半低于,见中位数


推荐阅读