Как игнорировать большие отклонения в списке - PullRequest
1 голос
/ 25 января 2020

Существуют списки типа [2.1, 2.01, 6, 2.2, 1.9] и [2, 7.1, 7.2, 6.9]. Есть ли в numpy (или другой библиотеке) функция удаления чисел, которые отклоняются более чем на 5% от других чисел. В этих случаях это будет 6 и 2.

Размер списка не фиксирован. Ни диапазон номеров.

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 января 2020
import numpy
data = [2.1, 2.01, 6, 2.2, 1.9]

elements = numpy.array(data)

mean = numpy.mean(elements, axis=0)
sd = numpy.std(elements, axis=0)
final_list = [x for x in data if (x > mean - 1 * sd)]
final_list = [x for x in final_list if (x < mean + 1 * sd)]
print(final_list)
[2.1, 2.01, 2.2, 1.9]

Источник: https://www.kdnuggets.com/2017/02/removing-outliers-standard-deviation-python.html

0 голосов
/ 25 января 2020

Попробуйте использовать scipy.stats.zscore:

from scipy.stats import zscore
a = np.array([2.1, 2.01, 6, 2.2, 1.9])
print(a[np.abs(zscore(a)) < max(a) / 5])

Вывод:

[ 2.1   2.01  2.2   1.9 ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...