Попробуйте использовать медианный или процентильный фильтр.Поскольку вы не хотите на самом деле изменять данные, если это не так, вы можете сделать что-то вроде этого:
for every point, collect *rank* points around it in every direction
compute statistics on the subset of points
if point is an outlier, replace with median value
Таким образом, вы на самом деле не заменяете значение точки, если оно далеко не там.Точка была бы выбросом, если она больше Q3 + 1.5 IQR
или если она меньше Q1 - 1.5 IQR
.
Вот фрагмент кода VI, выполняющий фильтр, который я описал:

Если вы хотите изменить только более экстремальные выбросызатем увеличьте множитель IQR.