Как отфильтровать список по большинству в python?

#python

#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
  

Дайте мне знать, если потребуются дополнительные пояснения / примеры, заранее благодарю.

Комментарии:

1. Вы ищете то, что называется надежной статистикой, такой как median .

2. @cbo, спасибо, что после поиска в Google, похоже, это то, что мне нужно, я обновлю протектор, если получу рабочий код, спасибо.

Ответ №1:

вы можете использовать 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. Медиана — это такая точка, что половина наблюдений находится выше, а половина — ниже, см. Медиана